** 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
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
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
#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));
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();
{
struct psensor **sensors_cur;
char *str;
-
json_object *obj = json_object_new_array();
sensors_cur = sensors;
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 \
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) \
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"));
--- /dev/null
+<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>
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>");
});
});
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;
+}
+