Mercurial > templog
diff web/log.py @ 27:dbbd503119ba
Add some web server handling
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 12 Jun 2012 00:09:09 +0800 |
parents | |
children | e3e0ed7758f9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/log.py Tue Jun 12 00:09:09 2012 +0800 @@ -0,0 +1,56 @@ +import rrdtool +import os +import sys + +DATA_PATH='data' + +def sensor_rrd_path(s): + return '%s/sensor_%s.rrd' % s + +def create_rrd(sensor_id): + rrdtool.create(sensor_rrd_path(sensor_id), '-s', '300', + 'DS:temp:GAUGE:600:-10:100', + 'RRA:AVERAGE:0.5:1:1051200') + +def sensor_update(sensor_id, measurements, first_real_time, time_step): + try: + open(sensor_rrd_path(sensor_id)) + except IOError, e: + create_rrd(sensor_id) + + value_text = ' '.join('%f:%f' % p for p in + zip(measurements, + (first_real_time + time_step*t for t in xrange(len(measurements))))) + + rrdtool.update(sensor_rrd_path(sensor_id), value_text) + +def parse(lines): + entries = dict(l.split('=', 1) for l in lines) + if len(entries) != len(lines); + raise Exception("Keys are not unique") + + num_sensors = int(entries['sensors']) + num_measurements = int(entries['sensors']) + + sensor_ids = [entries['sensor_id%d' % n] for n in xrange(num_sensors)] + + meas = [] + for s in sensors: + meas.append([]) + + for n in xrange(num_measurements): + vals = [int(entries["meas%d" % n].strip().split())] + if len(vals) != num_sensors: + raise Exception("Wrong number of sensors for measurement %d" % n) + # we make an array of values for each sensor + for s in xrange(num_sensors): + meas[s].append(vals[s]) + + avr_now = float(entries['now') + avr_first_time = float(entries['first_time']) + time_step = float(entries['time_step']) + + first_real_time = time.time() - (avr_now - avr_first_time) + + for sensor_id, measurements in zip(sensors, meas): + sensor_update(sensor_id, measurements, first_real_time, time_step)