Mercurial > templog
diff py/receive.py @ 193:063ff856f9c5
working
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 11 Feb 2014 23:48:03 +0800 |
parents | |
children | e27075b1e088 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/py/receive.py Tue Feb 11 23:48:03 2014 +0800 @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +import params +import json +import sys +import tempfile +import signal +import os + +import config + + +def same_type(a, b): + ta = type(a) + tb = type(b) + + if ta == int: + ta = float + if tb == int: + tb = float + + return (ta == tb) + +def main(): + + i = sys.stdin.read() + new_params = json.loads(i) + + def_params = params.Params() + + if def_params.viewkeys() != new_params.viewkeys(): + diff = def_params.viewkeys() ^ new_params.viewkeys() + return "Mismatching params, %s" % str(diff) + + for k, v in new_params.items(): + if not same_type(v, def_params[k]): + return "Bad type for %s" % k + + dir = os.path.dirname(config.PARAMS_FILE) + + try: + t = tempfile.NamedTemporaryFile(prefix='config', + dir = dir, + delete = False) + + t.write(json.dumps(new_params, sort_keys=True, indent=4)+'\n') + + os.rename(t.name, config.PARAMS_FILE) + except Exception, e: + return "Problem: %s" % e + + try: + pid = int(open('%s/tempserver.pid' % dir, 'r').read()) + if pid < 2: + return "Bad pid %d" % pid + os.kill(pid, signal.SIGHUP) + except Exception, e: + return "HUP problem: %s" % e + + return 'Good Update' + +if __name__ == '__main__': + print main() +