83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
#!/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("<exceptions></exceptions>")
|
|
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()
|
|
|