Commit 3489f43e by Szeberényi Imre

Win merge

parent d0dd1fa5
...@@ -9,5 +9,4 @@ version.txt ...@@ -9,5 +9,4 @@ version.txt
*.log *.log
build build
dist dist
*.exe
*.spec *.spec
...@@ -18,19 +18,21 @@ formatter = logging.Formatter( ...@@ -18,19 +18,21 @@ formatter = logging.Formatter(
"%(asctime)s - %(name)s [%(levelname)s] %(message)s") "%(asctime)s - %(name)s [%(levelname)s] %(message)s")
fh.setFormatter(formatter) fh.setFormatter(formatter)
logger.addHandler(fh) logger.addHandler(fh)
level = os.environ.get('LOGLEVEL', 'DEBUG') #level = os.environ.get('LOGLEVEL', 'DEBUG')
logger.setLevel(level)
logger.setLevel('INFO')
logger.info("%s loaded", __file__) logger.info("%s loaded", __file__)
class AppServerSvc (win32serviceutil.ServiceFramework): class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "circle-agent" _svc_name_ = "circle-agent"
_svc_display_name_ = "CIRCLE Agent" _svc_display_name_ = "CIRCLE Agent"
_svc_desciption_ = "CIRCLE cloud contextualization agent"
def __init__(self, args): def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args) win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
socket.setdefaulttimeout(60) socket.setdefaulttimeout(120)
def SvcStop(self): def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
...@@ -39,15 +41,25 @@ class AppServerSvc (win32serviceutil.ServiceFramework): ...@@ -39,15 +41,25 @@ class AppServerSvc (win32serviceutil.ServiceFramework):
logger.info("%s stopped", __file__) logger.info("%s stopped", __file__)
def SvcDoRun(self): def SvcDoRun(self):
logger.info("%s starting", __file__)
cnt = 3
while cnt > 0:
try:
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED, servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, '')) (self._svc_name_, ''))
logger.info("%s starting", __file__) break
except Exception as e:
logger.exception("Servicemanager busy?", e)
cnt -= 1
if cnt:
logger.info("Starting agent_main")
agent_main() agent_main()
def 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... # service must be starting...
# for the sake of debugging etc, we use win32traceutil to see # for the sake of debugging etc, we use win32traceutil to see
# any unhandled exceptions and print statements. # any unhandled exceptions and print statements.
......
...@@ -112,7 +112,7 @@ class SerialLineReceiver(SerialLineReceiverBase): ...@@ -112,7 +112,7 @@ class SerialLineReceiver(SerialLineReceiverBase):
self.transport.dataBuffer = b"" self.transport.dataBuffer = b""
self.transport._tempDataBuffer = [] # will be added to dataBuffer in doWrite self.transport._tempDataBuffer = [] # will be added to dataBuffer in doWrite
self.transport._tempDataLen = 0 self.transport._tempDataLen = 0
self.transport.write('\r\n') self.transport.write(b'\r\n')
if self.running: if self.running:
self.send_command( self.send_command(
command='agent_started', command='agent_started',
......
...@@ -31,13 +31,22 @@ def watch(): ...@@ -31,13 +31,22 @@ def watch():
def start_service(): def start_service():
win32serviceutil.StartService(service_name) 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: while True:
if not check_service(service_name): if not check_service(service_name):
logger.info("Service %s is not running.", service_name) logger.info("Service %s is not running.", service_name)
try:
start_service() 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: if stopped:
return return
sleep(10) sleep(timo)
class AppServerSvc (win32serviceutil.ServiceFramework): class AppServerSvc (win32serviceutil.ServiceFramework):
...@@ -65,7 +74,8 @@ class AppServerSvc (win32serviceutil.ServiceFramework): ...@@ -65,7 +74,8 @@ class AppServerSvc (win32serviceutil.ServiceFramework):
def 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... # service must be starting...
# for the sake of debugging etc, we use win32traceutil to see # for the sake of debugging etc, we use win32traceutil to see
# any unhandled exceptions and print statements. # any unhandled exceptions and print statements.
......
...@@ -7,7 +7,7 @@ from os.path import join ...@@ -7,7 +7,7 @@ from os.path import join
import logging import logging
import tarfile import tarfile
from io import StringIO from io import BytesIO
from base64 import b64decode from base64 import b64decode
from hashlib import md5 from hashlib import md5
from datetime import datetime from datetime import datetime
...@@ -101,7 +101,7 @@ class Context(BaseContext): ...@@ -101,7 +101,7 @@ class Context(BaseContext):
@staticmethod @staticmethod
def _update_registry(dir, executable): def _update_registry(dir, executable):
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\circle-agent # 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) HKEY_LOCAL_MACHINE, KEY_ALL_ACCESS)
with OpenKeyEx(HKEY_LOCAL_MACHINE, with OpenKeyEx(HKEY_LOCAL_MACHINE,
r'SYSTEM\CurrentControlSet\services\circle-agent', r'SYSTEM\CurrentControlSet\services\circle-agent',
...@@ -115,18 +115,19 @@ class Context(BaseContext): ...@@ -115,18 +115,19 @@ class Context(BaseContext):
def update(filename, executable, checksum, uuid): def update(filename, executable, checksum, uuid):
with open(filename, "r") as f: with open(filename, "r") as f:
data = f.read() 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: if local_checksum != checksum:
raise Exception("Checksum missmatch the file is damaged.") raise Exception("Checksum missmatch the file is damaged.")
decoded = StringIO(b64decode(data)) decoded = BytesIO(b64decode(data))
try: try:
tar = tarfile.TarFile.open("dummy", fileobj=decoded, mode='r|gz') tar = tarfile.TarFile.open("dummy", fileobj=decoded, mode='r|gz')
tar.extractall(working_directory) tar.extractall(working_directory)
except tarfile.ReadError as e: except tarfile.ReadError as e:
logger.error(e) logger.error(e)
logger.info("Transfer completed!") logger.info("Transfer completed!")
Context._update_registry(working_directory, executable) old_exe = Context._update_registry(working_directory, executable)
logger.info('Updated') logger.info('%s Updated', old_exe)
reactor.stop() reactor.stop()
@staticmethod @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