Commit 3489f43e by Szeberényi Imre

Win merge

parent d0dd1fa5
......@@ -9,5 +9,4 @@ version.txt
*.log
build
dist
*.exe
*.spec
......@@ -18,19 +18,21 @@ formatter = logging.Formatter(
"%(asctime)s - %(name)s [%(levelname)s] %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)
level = os.environ.get('LOGLEVEL', 'DEBUG')
logger.setLevel(level)
#level = os.environ.get('LOGLEVEL', 'DEBUG')
logger.setLevel('INFO')
logger.info("%s loaded", __file__)
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "circle-agent"
_svc_display_name_ = "CIRCLE Agent"
_svc_desciption_ = "CIRCLE cloud contextualization agent"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
socket.setdefaulttimeout(60)
socket.setdefaulttimeout(120)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
......@@ -39,15 +41,25 @@ class AppServerSvc (win32serviceutil.ServiceFramework):
logger.info("%s stopped", __file__)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, ''))
logger.info("%s starting", __file__)
agent_main()
cnt = 3
while cnt > 0:
try:
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, ''))
break
except Exception as e:
logger.exception("Servicemanager busy?", e)
cnt -= 1
if cnt:
logger.info("Starting agent_main")
agent_main()
def main():
if len(sys.argv) == 0: # never happen set 1 for debugging!!!!
logger.info("Started: %s", sys.argv)
if len(sys.argv) == 1:
# service must be starting...
# for the sake of debugging etc, we use win32traceutil to see
# any unhandled exceptions and print statements.
......
......@@ -112,7 +112,7 @@ class SerialLineReceiver(SerialLineReceiverBase):
self.transport.dataBuffer = b""
self.transport._tempDataBuffer = [] # will be added to dataBuffer in doWrite
self.transport._tempDataLen = 0
self.transport.write('\r\n')
self.transport.write(b'\r\n')
if self.running:
self.send_command(
command='agent_started',
......
......@@ -31,14 +31,23 @@ def watch():
def start_service():
win32serviceutil.StartService(service_name)
timo_base = 20
timo = timo_base
sleep(6*timo) # boot process may have triggered the agent, so we are patient
while True:
if not check_service(service_name):
logger.info("Service %s is not running.", service_name)
start_service()
try:
start_service()
timo = timo_base
logger.info("Service %s started.", service_name)
except Exception as e:
timo *= 2
logger.exception("Cant start service %s new timo: %s" % (service_name, timo))
if stopped:
return
sleep(10)
sleep(timo)
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "circle-watchdog"
......@@ -65,7 +74,8 @@ class AppServerSvc (win32serviceutil.ServiceFramework):
def main():
if len(sys.argv) == 0: # never happen set 1 for debugging!!!!
logger.info("Started: %s", sys.argv)
if len(sys.argv) == 1:
# service must be starting...
# for the sake of debugging etc, we use win32traceutil to see
# any unhandled exceptions and print statements.
......
......@@ -7,7 +7,7 @@ from os.path import join
import logging
import tarfile
from io import StringIO
from io import BytesIO
from base64 import b64decode
from hashlib import md5
from datetime import datetime
......@@ -101,7 +101,7 @@ class Context(BaseContext):
@staticmethod
def _update_registry(dir, executable):
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\circle-agent
from _winreg import (OpenKeyEx, SetValueEx, QueryValueEx,
from winreg import (OpenKeyEx, SetValueEx, QueryValueEx,
HKEY_LOCAL_MACHINE, KEY_ALL_ACCESS)
with OpenKeyEx(HKEY_LOCAL_MACHINE,
r'SYSTEM\CurrentControlSet\services\circle-agent',
......@@ -115,18 +115,19 @@ class Context(BaseContext):
def update(filename, executable, checksum, uuid):
with open(filename, "r") as f:
data = f.read()
local_checksum = md5(data).hexdigest()
logger.debug("type(data) %s" % type(data))
local_checksum = md5(data.encode()).hexdigest()
if local_checksum != checksum:
raise Exception("Checksum missmatch the file is damaged.")
decoded = StringIO(b64decode(data))
decoded = BytesIO(b64decode(data))
try:
tar = tarfile.TarFile.open("dummy", fileobj=decoded, mode='r|gz')
tar.extractall(working_directory)
except tarfile.ReadError as e:
logger.error(e)
logger.info("Transfer completed!")
Context._update_registry(working_directory, executable)
logger.info('Updated')
old_exe = Context._update_registry(working_directory, executable)
logger.info('%s Updated', old_exe)
reactor.stop()
@staticmethod
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment