comparison web/log.py @ 104:7f3fc0980df1

- few more web tweaks. don't fsync, it's slow.
author Matt Johnston <matt@ucc.asn.au>
date Sun, 26 Aug 2012 20:08:47 +0800
parents ef59da811986
children 397ac5c079bf
comparison
equal deleted inserted replaced
103:ef59da811986 104:7f3fc0980df1
53 li = f(1) * 0.15 + 0.55 53 li = f(1) * 0.15 + 0.55
54 sat = f(2) * 0.5 + .5 54 sat = f(2) * 0.5 + .5
55 return ''.join(["%.2x" % int(x * 256) for x in hls_to_rgb(hue, li, sat)]) 55 return ''.join(["%.2x" % int(x * 256) for x in hls_to_rgb(hue, li, sat)])
56 56
57 def graph_png(start, length): 57 def graph_png(start, length):
58 os.environ['MATT_PNG_BODGE_COMPRESS'] = '4'
59 os.environ['MATT_PNG_BODGE_FILTER'] = 'paeth'
58 rrds = all_sensors() 60 rrds = all_sensors()
59 61
60 graph_args = [] 62 graph_args = []
61 have_volts = False 63 have_volts = False
62 for n, (rrdfile, sensor) in enumerate(rrds): 64 for n, (rrdfile, sensor) in enumerate(rrds):
119 args += ['--right-axis', '10:-20', # matches the scalevolts CDEF above 121 args += ['--right-axis', '10:-20', # matches the scalevolts CDEF above
120 '--right-axis-format', '%.0lf', 122 '--right-axis-format', '%.0lf',
121 # '--right-axis-label', 'Temperature' 123 # '--right-axis-label', 'Temperature'
122 ] 124 ]
123 125
126 print>>sys.stderr, ' '.join("'%s'" % s for s in args)
124 rrdtool.graph(*args) 127 rrdtool.graph(*args)
128 #return tempf
125 return tempf.read() 129 return tempf.read()
126 130
127 def sensor_update(sensor_id, measurements, first_real_time, time_step): 131 def sensor_update(sensor_id, measurements, first_real_time, time_step):
128 try: 132 try:
129 open(sensor_rrd_path(sensor_id)) 133 open(sensor_rrd_path(sensor_id))
139 # XXX what to do here when it fails... 143 # XXX what to do here when it fails...
140 for v in values: 144 for v in values:
141 try: 145 try:
142 rrdtool.update(rrdfile, v) 146 rrdtool.update(rrdfile, v)
143 except rrdtool.error, e: 147 except rrdtool.error, e:
144 print>>sys.stderr, "Bad rrdtool update '%s'" % v 148 print>>sys.stderr, "Bad rrdtool update '%s': %s" % (v, str(e))
145 traceback.print_exc(file=sys.stderr) 149 traceback.print_exc(file=sys.stderr)
146 150
147 # be paranoid 151 # be paranoid
148 f = file(rrdfile) 152 #f = file(rrdfile)
149 os.fsync(f.fileno()) 153 #os.fsync(f.fileno())
150 154
151 def debug_file(mode='r'): 155 def debug_file(mode='r'):
152 return open('%s/debug.log' % config.DATA_PATH, mode) 156 return open('%s/debug.log' % config.DATA_PATH, mode)
153 157
154 def record_debug(lines): 158 def record_debug(lines):
176 tick_wake = int(entries['tick_wake']) + 1 180 tick_wake = int(entries['tick_wake']) + 1
177 tick_secs = int(entries['tick_secs']) 181 tick_secs = int(entries['tick_secs'])
178 return val_ticks + float(val_rem) * tick_secs / tick_wake 182 return val_ticks + float(val_rem) * tick_secs / tick_wake
179 183
180 def parse(lines): 184 def parse(lines):
185
186 start_time = time.time()
181 187
182 debugf = record_debug(lines) 188 debugf = record_debug(lines)
183 189
184 entries = dict(l.split('=', 1) for l in lines) 190 entries = dict(l.split('=', 1) for l in lines)
185 if len(entries) != len(lines): 191 if len(entries) != len(lines):
227 233
228 for sensor_id, measurements in zip(sensors, meas): 234 for sensor_id, measurements in zip(sensors, meas):
229 # XXX sqlite add 235 # XXX sqlite add
230 sensor_update(sensor_id, measurements, first_real_time, time_step) 236 sensor_update(sensor_id, measurements, first_real_time, time_step)
231 237
232 debugf.write("Updated %d sensors\n" % len(sensors)) 238 timedelta = time.time() - start_time
239 debugf.write("Updated %d sensors in %.2f secs\n" % (len(sensors), timedelta))
233 debugf.flush() 240 debugf.flush()