--- /dev/null
+
+var _ = require('lodash');
+
+/*
+ * Args:
+ * rules - object with the monitoring param to simulator function mapping
+ * see data/simmp.json
+ */
+SimMp = function(rules) {
+ this.rules = _.clone(rules, true);
+};
+
+//SimMp.prototype.map_rule = function(mp_id) {
+// return this.rules['mp-mapper'][mp_id];
+//}
+
+// Use the monitoring param id for now
+SimMp.prototype.createSimMonitorFunc = function(mp) {
+
+ // Define our core simulation function here
+ //
+ // min, max inclusive
+ var rand_func = function(min, max) {
+ return Math.floor(Math.random() * (max-min+1)) + min;
+ }
+
+ var funcs = {
+ // transmit and receive rate
+ tx_rc_rate: function(value, elapsed_seconds) {
+ // Ignore elapsed time for first implementation of transmit and
+ // receive rate simulation.
+ // This is just a quick and dirty and simple implementation to make
+ // the monitoring params change, stay within bounds, and not swing
+ // wildly.
+ var min_val = mp.min_value;
+ var max_val = mp.max_value;
+ // Set an outer bound of maxmium change from current value
+ // Tweak bin_count to set how much the value can swing from the
+ // last value
+ var bin_count = 10;
+ // Set the range we can generate the new value based on a function
+ // of the difference of the max and min values
+ var max_delta = (max_val - min_val) / bin_count;
+ console.log('Setting max_delta = %s', max_delta);
+ var new_val = rand_func(
+ Math.max(min_val, value-max_delta),
+ Math.min(max_val, value+max_delta));
+ //console.log("Generated value: %s", new_val);
+ return new_val;
+ },
+ packet_size: function(value, elapsed_seconds) {
+ // Stub method just returns value unchanged
+ // TODO: Figure out how we want to vary packet sizes
+ return value;
+ },
+ accumulate: function(value, elapsed_seconds) {
+ // NOT TESTED. Basic idea. Will want to add variablility
+ // how fast we accumulate
+ var accumulate_rate = 0.1;
+ var new_value = value + (elapsed_seconds * accumulate_rate);
+ return new_value;
+ }
+ // add growth function
+ };
+
+ // Declare our monitoring param id to sim function mapping here
+ // TODO: Move out to a yaml/json file and make this function belong to
+ // a 'Class'
+ //var mapper = {
+ // 'tx-rate-pp1': funcs['tx_rc_rate'],
+ // 'rc-rate-pp1': funcs['tx_rc_rate']
+ //};
+
+ var sim_func_name = this.rules['mp-mapper'][mp.id];
+ if (sim_func_name) {
+ return funcs[sim_func_name];
+ } else {
+ console.log('No time step sim function found for monitoring param with id "%s", using constant value', mp.id);
+ return function(value, elapsed_seconds) {
+ return value;
+ }
+ }
+}
+
+module.exports = {
+ SimMp: SimMp
+};