added graph of sensors (web server)
authorJean-Philippe Orsini <jeanfi@gmail.com>
Fri, 22 Jul 2011 21:45:47 +0000 (21:45 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Fri, 22 Jul 2011 21:45:47 +0000 (21:45 +0000)
NEWS
src/libpsensor_json/Makefile.am
src/libpsensor_json/Makefile.in
src/libpsensor_json/psensor_json.c
src/server/Makefile.am
src/server/Makefile.in
src/server/server.c
www/details.html [new file with mode: 0644]
www/monitor.html
www/psensor.js

diff --git a/NEWS b/NEWS
index e44d38c..a6863c0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,8 @@
 ** psensor-server: added monitor.html using jquery and retrieving
    monitoring data from the JSON web interface.
 ** added support for ATI/AMD gpus and fans.
+** psensor: added support of CPU usage monitoring.
+** psensor-server: display graph of sensors (web server).
 
 * v0.6.2.9
 
index a85c829..e2bff28 100644 (file)
@@ -1,6 +1,6 @@
 noinst_LIBRARIES = libpsensor_json.a
 
-libpsensor_json_a_CFLAGS = -pedantic -Werror
+libpsensor_json_a_CFLAGS = -pedantic -Wall -Werror
 
 libpsensor_json_a_SOURCES = \
        psensor_json.h psensor_json.c 
index 122945a..7558443 100644 (file)
@@ -212,7 +212,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 noinst_LIBRARIES = libpsensor_json.a
-libpsensor_json_a_CFLAGS = -pedantic -Werror
+libpsensor_json_a_CFLAGS = -pedantic -Wall -Werror
 libpsensor_json_a_SOURCES = \
        psensor_json.h psensor_json.c 
 
index b31dc35..5d5889d 100644 (file)
 #define ATT_SENSOR_MIN "min"
 #define ATT_SENSOR_MAX "max"
 #define ATT_SENSOR_LAST_MEASURE "last_measure"
+#define ATT_SENSOR_MEASURES "measures"
 #define ATT_MEASURE_VALUE "value"
 #define ATT_MEASURE_TIME "time"
 
+static json_object *
+measure_to_json_object(struct measure *m)
+{
+       json_object *o = json_object_new_object();
+
+       json_object_object_add(o,
+                              ATT_MEASURE_VALUE,
+                              json_object_new_double(m->value.d_num));
+       json_object_object_add(o, ATT_MEASURE_TIME,
+                              json_object_new_int((m->time).tv_sec));
+       return o;
+}
+
+static json_object *
+measures_to_json_object(struct psensor *s)
+{
+       json_object *o;
+       int i;
+
+       o = json_object_new_array();
+
+       for (i = 0; i < s->values_max_length; i++)
+               if (s->measures[i].time.tv_sec)
+                       json_object_array_add
+                               (o, measure_to_json_object(&s->measures[i]));
+
+
+       return o;
+}
+
 json_object *sensor_to_json_object(struct psensor *s)
 {
-       json_object *mo;
-       json_object *obj = json_object_new_object();
+       json_object *mo, *obj;
        struct measure *m;
 
+       obj = json_object_new_object();
+
        json_object_object_add(obj,
                               ATT_SENSOR_ID,
                               json_object_new_string(s->id));
@@ -48,6 +80,9 @@ json_object *sensor_to_json_object(struct psensor *s)
                               ATT_SENSOR_MIN, json_object_new_double(s->min));
        json_object_object_add(obj,
                               ATT_SENSOR_MAX, json_object_new_double(s->max));
+       json_object_object_add(obj,
+                              ATT_SENSOR_MEASURES,
+                              measures_to_json_object(s));
 
        m = psensor_get_current_measure(s);
        mo = json_object_new_object();
@@ -77,7 +112,6 @@ char *sensors_to_json_string(struct psensor **sensors)
 {
        struct psensor **sensors_cur;
        char *str;
-
        json_object *obj = json_object_new_array();
 
        sensors_cur = sensors;
index 3b42c56..0aab252 100644 (file)
@@ -1,7 +1,7 @@
 bin_PROGRAMS =  psensor-server
 psensor_server_SOURCES = server.c server.h
 
-AM_CPPFLAGS = -pedantic -Werror -DDEFAULT_WWW_DIR=\""$(pkgdatadir)/www"\"\
+AM_CPPFLAGS = -pedantic -Wall -Werror -DDEFAULT_WWW_DIR=\""$(pkgdatadir)/www"\"\
        -I$(top_srcdir)/src \
        -I$(top_srcdir)/src/lib \
        -I$(top_srcdir)/src/libpsensor_json \
index 1cd7671..68022ad 100644 (file)
@@ -241,7 +241,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 psensor_server_SOURCES = server.c server.h $(am__append_3)
-AM_CPPFLAGS = -pedantic -Werror \
+AM_CPPFLAGS = -pedantic -Wall -Werror \
        -DDEFAULT_WWW_DIR=\""$(pkgdatadir)/www"\" -I$(top_srcdir)/src \
        -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/libpsensor_json \
        $(SENSORS_CFLAGS) $(JSON_CFLAGS) $(LIBMICROHTTPD_CFLAGS) \
index a95c0d1..8395609 100644 (file)
@@ -349,7 +349,7 @@ int main(int argc, char *argv[])
 
        psensor_init();
 
-       server_data.sensors = get_all_sensors(1);
+       server_data.sensors = get_all_sensors(600);
 
        if (!*server_data.sensors)
                fprintf(stderr, _("ERROR: no sensors detected\n"));
diff --git a/www/details.html b/www/details.html
new file mode 100644 (file)
index 0000000..fbc841a
--- /dev/null
@@ -0,0 +1,61 @@
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>Sensor details</title>
+
+    <link type="text/css" href="style.css" rel="stylesheet" /> 
+    <script type="text/javascript" src="jquery.js"></script>
+    <script type="text/javascript" src="psensor.js"></script>
+    <script type="text/javascript" src="jquery.jqplot.min.js"></script>
+    <script type="text/javascript" src="jqplot.dateAxisRenderer.min.js"></script>
+
+    <script>
+      $(document).ready(function() {
+          var params = get_url_params();
+          var url_id = params["id"];
+
+
+          $.getJSON("/api/1.0/sensors/"+url_id, function(data) {
+              var measures = data["measures"];
+              var data_chart = [];
+
+              $("#title").append(data["name"]);
+
+              $.each(measures, function(i, item) {
+                  var d = new Date(item["time"]*1000);
+                  var entry = [d, item["value"]];
+                  data_chart.push(entry);
+              });
+
+              var plot1 = $.jqplot ('chart1', [data_chart], 
+                  {
+                      title:'Temperature',
+                      axes:{
+                          xaxis:{
+                              renderer:$.jqplot.DateAxisRenderer,
+                              tickOptions:{formatString:'%H:%M:%S'}
+                          }
+                      },
+                      series: [{lineWidth:1,showMarker:false}]
+                  });
+          });
+      });
+    </script>
+  </head>
+  <body>
+    <div class='page'>
+      <div class='page-header'>
+        <h1 id='title'>Details </h1>
+      </div>
+
+      <div class='page-content'>
+       <div id='chart1'></div>
+      </div>
+    </div>
+
+    <div class='page-footer'>
+      <a href='http://wpitchoune.net/psensor'>Psensor Server</a> - (c)2011 jeanfi@gmail.com 
+    </div>    
+
+  </body>
+</html>
index b7417af..ce33104 100644 (file)
                   unit = type_to_unit(stype);
                   stype_str = type_to_str(stype);
 
-                  $("#sensors").append("<tr><td>"+sname+"</td><td>"+svalue+unit+"</td><td>"+smin+unit+"</td><td>"+smax+unit+"</td><td>"+stype_str+"</td></tr>");                 
+                  $("#sensors").append("<tr>"
+                                      +"<td>"
+                                      +"<a href='details.html?id="+escape(item["id"])
+                                       +"'>"+sname+"</a></td>"
+                                      +"<td>"+svalue+unit+"</td><td>"+smin+unit+"</td><td>"+smax+unit+"</td><td>"+stype_str+"</td></tr>");                 
               });          
           });
 
index 2092509..30b7001 100644 (file)
@@ -53,3 +53,17 @@ function type_to_unit(stype) {
 
     return unit;
 }
+
+function get_url_params()
+{
+    var vars = [], hash;
+    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
+    for(var i = 0; i < hashes.length; i++)
+    {
+        hash = hashes[i].split('=');
+        vars.push(hash[0]);
+        vars[hash[0]] = hash[1];
+    }
+    return vars;
+}
+