Subversion Repositories HomeAutomation

Rev

Rev 2042 | Rev 2047 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. /* RRD_Tool() must be called from autostart.js to start timers */
  2. function RRD_Tool()
  3. {
  4.     /* We must always call the parent constructor, initialization
  5.        of variables could be done here, but initialize is a better place */
  6.     var self = this;
  7.    
  8.     /* Constant config name */
  9.     RRD_Tool_Config = "RRD_Tool_config";
  10.    
  11.     Log("\033[33mRRD Tool updater starting...\033[0m");
  12.    
  13.     var last_value_string = Storage_GetParameters(RRD_Tool_Config);
  14.     RRD_Tool_StoredData = new Array();
  15.     RRD_Tool_Timers = new Array();
  16.     for (var name in last_value_string)
  17.     {
  18.         RRD_Tool_StoredData[name] = eval("(" + last_value_string[name] + ")");
  19.         Log("\033[33mFound: "+name+" with update rate of "+RRD_Tool_StoredData[name]["rrd"]["Period_s"]+"s.\033[0m");
  20.         RRD_Tool_Timers[name] = Timer_SetTimer(function(timer) {RRD_Tool_timerUpdate(timer)}, RRD_Tool_StoredData[name]["rrd"]["Period_s"]*1000, true);
  21.     }
  22.     Log("\033[33mRRD Tool updater created.\033[0m");
  23. }
  24.  
  25. /* Declaration of static variables */
  26. RRD_Tool_myInterval = null;
  27. RRD_Tool_StoredData = null;
  28. RRD_Tool_Timers = null;
  29. RRD_Tool_Config = null;
  30.  
  31. RRD_Tool_timerUpdate = function(timer)
  32. {
  33.     var alias_string = Storage_GetParameters("LastValues");
  34.     for (var name in RRD_Tool_Timers)
  35.     {  
  36.         if (RRD_Tool_Timers[name] == timer) {
  37.             //Log("Timer: "+timer+", named: "+name+" with data: "+RRD_Tool_StoredData[name]["rrd"]["file"]+"\n");
  38.             /* Create command to execute...*/
  39.             var names = "";
  40.             var values = "N";
  41.             var cmd = "/usr/bin/rrdtool update --template ";
  42.             var first = 1;
  43.             for (var label in RRD_Tool_StoredData[name]["rrdNames"])
  44.             {
  45.                 //Log("Found label: "+label+"\n");
  46.                 var data = eval("(" + alias_string[RRD_Tool_StoredData[name]["rrdNames"][label]["Module"]] + ")");
  47.                 if (first == 1) {
  48.                     names += label;
  49.                     first = 0;
  50.                 } else {
  51.                     names += ":"+label;  
  52.                 }
  53.                 values += ":"+data[RRD_Tool_StoredData[name]["rrdNames"][label]["data"]][RRD_Tool_StoredData[name]["rrdNames"][label]["value"]];
  54.             }
  55.             cmd += names + " "+RRD_Tool_StoredData[name]["rrd"]["file"]+" "+values;
  56.             //Log("Command: "+cmd);
  57.             Execute(cmd);
  58.             break;
  59.         }
  60.     }
  61. }
  62.  
  63. /* Tab complete stuff */
  64. RRD_Tool_Aliases        = function() { return Module_GetAliasNames(); };
  65. RRD_Tool_Intervals      = function() { return [ 5, 10, 30, 60, 120, 150, 300 ]; };
  66. /* Function returns an array with all CAN variables existing in LastValues storage */
  67. RRD_Tool_Variables      = function()
  68. {
  69.     var last_value_string = Storage_GetParameters("LastValues");
  70.     var last_values = new Array();
  71.     var last_values_variables = [];
  72.     for (var name in last_value_string)
  73.     {
  74.         last_values[name] = eval("(" + last_value_string[name] + ")");
  75.         for (var name2 in last_values[name])
  76.         {
  77.             /* Only get unique variables */
  78.             if (last_values_variables.indexOf(name2) == -1)
  79.             {
  80.                 last_values_variables.push(name2);
  81.             }
  82.         }
  83.     }
  84.     return last_values_variables;
  85. };
  86.  
  87. /*
  88. electricPower={"rrd":{"file":"/var/www/appdata/rrd-data-new/electricPower.rrd","Period_s":"60"}, "rrdNames":{"power":{"Module":"powerMeter","data":"Power32","value":"value"}}}
  89.  
  90. <store_name>={"rrd":{"file":"<rrd_filename>","Period_s":"<push_interval>"}, "rrdNames":{"<rrd_data_source_name>":{"Module":"<alias_name>","data":"<variable_name>","value":"value"}}}
  91. */
  92.  
  93. /*
  94. TODO:
  95. handle more than one rrd data source (not possible with different alias/variables)
  96. function RRDTool_AddConfig(alias_name, variable_name, push_interval, store_name, rrd_filename, rrd_data_source_name_array)
  97. */
  98.  
  99. /* Function to add new rrd config on atomic command line interface */
  100. function RRDTool_AddConfig(alias_name, variable_name, push_interval, store_name, rrd_filename, rrd_data_source_name)
  101. {
  102.     if (arguments.length < 6)
  103.     {
  104.         Log("\033[31mNot enough parameters given.\033[0m\n");
  105.         return false;
  106.     }
  107.  
  108.     /* In case RRD_Tool() is not called from autostart.js yet */
  109.     if (RRD_Tool_Config == null || RRD_Tool_StoredData == null || RRD_Tool_Timers == null)
  110.     {
  111.         RRD_Tool_Config = "RRD_Tool_config";
  112.         RRD_Tool_StoredData = new Array();
  113.         RRD_Tool_Timers = new Array();
  114.        
  115.         Log("\033[31mRRD_Tool() must be called from autostart.js!.\033[0m\n");
  116.     }
  117.    
  118.     //Log("rrd data source array length: "+rrd_data_source_name_array.length);
  119.     //if (rrd_data_source_name_array.length > 0)
  120.     //{
  121.         var newString = "{\"rrd\":{\"file\":\"" + rrd_filename + "\",\"Period_s\":\"" + push_interval + "\"},\"rrdNames\":{\"" + rrd_data_source_name + "\":{\"Module\":\""+alias_name+"\",\"data\":\""+variable_name+"\",\"value\":\"value\"}}";
  122.         //for (var rrd_data_source in rrd_data_source_name_array)
  123.         //{
  124.         //  newString += "";
  125.         //}
  126.         newString += "}";
  127.        
  128.         /* Push new config line to storage */
  129.         Storage_SetParameter(RRD_Tool_Config, store_name, newString);
  130.         //Log("New config: "+newString + " configname " + RRD_Tool_Config +"\n");
  131.     //}
  132.  
  133.     /* Start this new config now */
  134.     RRD_Tool_StoredData[store_name] = eval("(" + newString + ")");
  135.     RRD_Tool_Timers[store_name] = Timer_SetTimer(function(timer) {RRD_Tool_timerUpdate(timer)}, RRD_Tool_StoredData[store_name]["rrd"]["Period_s"]*1000, true);
  136.     Log("\033[33mCreated: "+store_name+" with update rate of "+RRD_Tool_StoredData[store_name]["rrd"]["Period_s"]+"s.\033[0m\n");
  137. }
  138.  
  139. Console_RegisterCommand(RRDTool_AddConfig, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, RRD_Tool_Aliases(), RRD_Tool_Variables(), RRD_Tool_Intervals() ); });
  140.  
  141.