Mercurial > templog
view py/uploader.py @ 501:236e5d131b3e
Add url link, improve atomicfile
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sun, 30 Mar 2014 20:20:30 +0800 |
parents | 1865674794c3 |
children | 4d82099d1fe0 |
line wrap: on
line source
import json import hmac import zlib import binascii import urllib import urllib2 import gevent import config from utils import L,D,EX,W,E import utils class Uploader(gevent.Greenlet): def __init__(self, server): gevent.Greenlet.__init__(self) self.server = server def _run(self): gevent.sleep(5) while True: self.do() gevent.sleep(config.UPLOAD_SLEEP) def get_tosend(self, readings): tosend = {} tosend['fridge_on'] = self.server.fridge.is_on() tosend['now'] = self.server.now() tosend['readings'] = readings tosend['wort_name'] = self.server.wort_name tosend['fridge_name'] = self.server.wort_name tosend['current_params'] = dict(self.server.params) tosend['start_time'] = self.server.start_time tosend['uptime'] = utils.uptime() return tosend def send(self, tosend): js = json.dumps(tosend) js_enc = binascii.b2a_base64(zlib.compress(js)) mac = hmac.new(config.HMAC_KEY, js_enc).hexdigest() url_data = urllib.urlencode( {'data': js_enc, 'hmac': mac} ) con = urllib2.urlopen(config.UPDATE_URL, url_data) result = con.read(100) if result != 'OK': raise Exception("Server returned %s" % result) def do(self): readings = self.server.take_readings() try: tosend = self.get_tosend(readings) nreadings = len(readings) self.send(tosend) readings = None D("Sent updated %d readings" % nreadings) except urllib2.HTTPError, e: E("Error in uploader: %s" % str(e)) except Exception, e: EX("Error in uploader: %s" % str(e)) finally: if readings is not None: self.server.pushfront(readings)