comparison web/log.py @ 344:ea1779d27641

- Getting there, update has problems
author Matt Johnston <matt@ucc.asn.au>
date Sat, 16 Jun 2012 09:08:07 +0800
parents 449272fc63a3
children 9b5b202129c3
comparison
equal deleted inserted replaced
340:3baca8d980f4 344:ea1779d27641
1 #:vim:et:ts=4:sts=4:sw=4:
1 import rrdtool 2 import rrdtool
2 import os 3 import os
3 import os.path 4 import os.path
4 import sys 5 import sys
5 import glob 6 import glob
6 import hashlib 7 import hashlib
7 import tempfile 8 import tempfile
9 import time
10 import syslog
8 from colorsys import hls_to_rgb 11 from colorsys import hls_to_rgb
9 12
10 import config 13 import config
11 14
12 def sensor_rrd_path(s): 15 def sensor_rrd_path(s):
65 try: 68 try:
66 open(sensor_rrd_path(sensor_id)) 69 open(sensor_rrd_path(sensor_id))
67 except IOError, e: 70 except IOError, e:
68 create_rrd(sensor_id) 71 create_rrd(sensor_id)
69 72
70 values = ['%f:%f' % p for p in 73 print>>sys.stderr, sensor_id, measurements, first_real_time, time_step
71 zip((first_real_time + time_step*t for t in xrange(len(measurements))),
72 measurements)]
73 74
74 rrdfile = sensor_rrd_path(sensor_id) 75 if measurements:
75 rrdtool.update(rrdfile, *values) 76 values = ['%d:%f' % p for p in
77 zip((first_real_time + time_step*t for t in xrange(len(measurements))),
78 measurements)]
76 79
77 # be paranois 80 rrdfile = sensor_rrd_path(sensor_id)
78 f = file(rrdfile) 81 print>>sys.stderr, values
79 os.fsync(f.fileno()) 82 rrdtool.update(rrdfile, *values)
83
84 # be paranoid
85 f = file(rrdfile)
86 os.fsync(f.fileno())
80 87
81 def record_debug(lines): 88 def record_debug(lines):
82 f = open('%s/debug.log', config.DATA_PATH, 'a+') 89 f = open('%s/debug.log' % config.DATA_PATH, 'a+')
83 f.write('===== %s =====' % time.strftime('%a, %d %b %Y %H:%M:%S') 90 f.write('===== %s =====\n' % time.strftime('%a, %d %b %Y %H:%M:%S'))
84 f.writelines(('%s\n' % s for s in lines)) 91 f.writelines(('%s\n' % s for s in lines))
85 f.flush() 92 f.flush()
86 return f 93 return f
87 94
88 def parse(lines): 95 def parse(lines):
89 96
90 debugf = record_debug(lines): 97 debugf = record_debug(lines)
91 98
92 entries = dict(l.split('=', 1) for l in lines) 99 entries = dict(l.split('=', 1) for l in lines)
93 if len(entries) != len(lines): 100 if len(entries) != len(lines):
94 raise Exception("Keys are not unique") 101 raise Exception("Keys are not unique")
95 102
96 num_sensors = int(entries['sensors']) 103 num_sensors = int(entries['sensors'])
97 num_measurements = int(entries['sensors']) 104 num_measurements = int(entries['measurements'])
98 105
99 sensor_ids = [entries['sensor_id%d' % n] for n in xrange(num_sensors)] 106 sensors = [entries['sensor_id%d' % n] for n in xrange(num_sensors)]
100 107
101 meas = [] 108 meas = []
102 for s in sensors: 109 for s in sensors:
103 meas.append([]) 110 meas.append([])
104 111
105 def val_scale(v): 112 def val_scale(v):
106 # convert decidegrees to degrees 113 # convert decidegrees to degrees
107 return 0.1 * v 114 return 0.1 * v
108 115
109 for n in xrange(num_measurements): 116 for n in xrange(num_measurements):
110 vals = [val_scale(int(entries["meas%d" % n].strip().split()))] 117 vals = [val_scale(int(x)) for x in entries["meas%d" % n].strip().split()]
111 if len(vals) != num_sensors: 118 if len(vals) != num_sensors:
112 raise Exception("Wrong number of sensors for measurement %d" % n) 119 raise Exception("Wrong number of sensors for measurement %d" % n)
113 # we make an array of values for each sensor 120 # we make an array of values for each sensor
114 for s in xrange(num_sensors): 121 for s in xrange(num_sensors):
115 meas[s].append(vals[s]) 122 meas[s].append(vals[s])
121 first_real_time = time.time() - (avr_now - avr_first_time) 128 first_real_time = time.time() - (avr_now - avr_first_time)
122 129
123 for sensor_id, measurements in zip(sensors, meas): 130 for sensor_id, measurements in zip(sensors, meas):
124 sensor_update(sensor_id, measurements, first_real_time, time_step) 131 sensor_update(sensor_id, measurements, first_real_time, time_step)
125 132
126 debugf.write("Updated %d sensors\n" % len(sensors) 133 debugf.write("Updated %d sensors\n" % len(sensors))
127 debugf.flush() 134 debugf.flush()