#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os.path import os import time from Logger import Logger from ConnectionSetup import ConnectionSetup import settings def check_dirs_and_files(): # log if not os.path.exists(settings.logs): os.mkdir(settings.logs, 0000755) if not os.path.exists(settings.logname): open(settings.logname, 'w').close() if not os.path.exists(settings.exceptionlog): file=open(settings.exceptionlog, 'w') file.write("") file.close() # lock if not os.path.exists(settings.locks): os.mkdir(settings.locks, 0000755) # records if not os.path.exists(settings.records): os.mkdir(settings.records, 0000755) def obtainLock(lockfile = settings.lockname): if not os.path.exists(lockfile): lock = open(lockfile, 'w') lock.write( str(time.time()) ) lock.close() return True return False def freeLock(lockfile = settings.lockname): if os.path.exists(lockfile): os.remove(lockfile) def formatHost(host): return "%s:%d" % (host['name'], host['port']) if __name__ == "__main__": check_dirs_and_files() log=open(settings.logname, 'a') try: log.write("setting up all ... @" + time.ctime() + "\n") while True: if obtainLock(): logger = Logger(log) try: connections = [] connectedSensors = [] for con in settings.SENSORS: con = settings.SENSORS[con] conSetup = ConnectionSetup() connection, sensors = conSetup.setupConnectionAndSensors(con['host'], con['sensors'], settings.TIMES, logger.cb_generic) connections.append(connection) connectedSensors.append(sensors) log.write("started logging at " + formatHost(con['host']) + " ... @ " + time.ctime() + "\n") log.flush() raw_input("Press key to restart\n") log.write("stop logging... @" + time.ctime() + "\n") conSetup.disconnectAny(connections) except Exception as inst: #connection failed, log and exit logger.printException(inst) print(inst) freeLock() else: print("lock file active!!") log.write("lock collision: lock 'all' active @ " + time.ctime() + "\n") print("wait for retry (" + str(settings.waitDelay) + ")") time.sleep(settings.waitDelay) except KeyboardInterrupt: print(" Interrupted, cleaning up") conSetup.disconnectAny(connections) log.write("keyboard-interrupt happened @" + time.ctime() + "\n") log.close() freeLock()