Mercurial > templog
annotate py/uploader.py @ 458:94932e7051e5
Fix the updated json web code to work
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 03 Jan 2013 22:35:54 +0800 |
parents | 5b9dc87c988f |
children | 256505f98c4d |
rev | line source |
---|---|
444 | 1 import config |
2 | |
3 import json | |
4 import hmac | |
5 import zlib | |
6 | |
7 class Uploader(gevent.Greenlet): | |
8 def __init__(self, server): | |
9 gevent.Greenlet.__init__(self) | |
10 self.server = server | |
11 | |
12 def _run(self): | |
13 while True: | |
14 self.do() | |
15 gevent.sleep(config.UPLOAD_SLEEP) | |
16 | |
17 def get_tosend(self, readings): | |
18 tosend = {} | |
19 | |
20 tosend['fridge_on'] = self.server.fridge.is_on() | |
21 | |
22 tosend['now'] = self.server.now() | |
23 tosend['readings'] = readings | |
24 | |
25 tosend['wort_name'] = self.server.wort_name | |
26 tosend['fridge_name'] = self.server.wort_fridge_name | |
27 | |
28 tosend.update(dict(self.server.params)) | |
29 | |
30 tosend['start_time'] = self.server.start_time | |
31 tosend['uptime'] = utils.uptime() | |
32 | |
33 return tosend | |
34 | |
35 def send(self, tosend): | |
36 js = json.dumps(tosend) | |
37 js_enc = binascii.b2a_base64(zlib.compress(js)) | |
38 mac = hmac.new(config.HMAC_KEY, js_enc).hexdigest() | |
39 url_data = urllib.urlencode( {'data': js_enc, 'hmac': mac} ) | |
40 con = urllib2.urlopen(config.UPDATE_URL, url_data) | |
41 result = con.read(100) | |
42 if result != 'OK': | |
43 raise Exception("Server returned %s" % result) | |
44 | |
45 def do(): | |
46 readings = self.server.take_readings() | |
47 try: | |
445
5b9dc87c988f
update web to handle new style params
Matt Johnston <matt@ucc.asn.au>
parents:
444
diff
changeset
|
48 tosend = self.get_tosend(readings) |
444 | 49 readings = None |
50 self.send(tosend) | |
51 except Exception, e: | |
52 EX"Error in uploader: %s" % str(e)) | |
53 finally: | |
54 if readings is not None: | |
55 self.server.pushfront(readings) |