From 787186bc60e736d21e484212fac380b2589683e2 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 3 Oct 2023 17:17:47 +0100 Subject: [PATCH] Add killserver to API --- API.py | 22 +++++++++++++++++++--- bridge_master.py | 15 +++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/API.py b/API.py index c7fc06a..40b300a 100644 --- a/API.py +++ b/API.py @@ -41,6 +41,10 @@ class FD_APIUserDefinedContext(object): def options(self,system,options): self.CONFIG['SYSTEMS'][system]['OPTIONS'] = options + def killserver(self): + self.CONFIG['GLOBAL']['_KILL_SERVER'] = True + + class FD_API(ServiceBase): _version = 0.1 @@ -54,6 +58,9 @@ class FD_API(ServiceBase): def dummy(ctx): pass + ###################### + #User level API calls# + ###################### @rpc(Unicode,Unicode) def reset(ctx,dmrid,key): system = ctx.udc.validateKey(int(dmrid),key) @@ -70,9 +77,17 @@ class FD_API(ServiceBase): else: raise error.InvalidCredentialsError() - @rpc(UnsignedInteger32) - def killserver(ctx,killkey): - pass + + + ######################## + #System level API calls# + ######################## + @rpc(Unicode) + def killserver(ctx,systemkey): + if ctx.udc.validateSystemKey(systemkey): + return ctx.udc.killserver() + else: + raise error.InvalidCredentialsError() @rpc(Unicode,_returns=Unicode()) def getconfig(ctx,systemkey): @@ -88,3 +103,4 @@ class FD_API(ServiceBase): else: raise error.InvalidCredentialsError() + diff --git a/bridge_master.py b/bridge_master.py index a3a06c1..e5a1fc5 100644 --- a/bridge_master.py +++ b/bridge_master.py @@ -2725,6 +2725,16 @@ if __name__ == '__main__': if CONFIG['ALIASES']['SUB_MAP_FILE']: subMapWrite() + #Server kill routine + def kill_server(): + try: + if CONFIG['GLOBAL']['_KILL_SERVER']: + logger.info('(GLOBAL) SHUTDOWN: CONFBRIDGE IS TERMINATING - killserver called from API') + reactor.stop() + except KeyError: + pass + + # Set signal handers so that we can gracefully exit if need be for sig in [signal.SIGINT, signal.SIGTERM]: signal.signal(sig, sig_handler) @@ -2965,6 +2975,11 @@ if __name__ == '__main__': sub_trimmer_task = task.LoopingCall(SubMapTrimmer) sub_trimmer = sub_trimmer_task.start(3600)#3600 sub_trimmer.addErrback(loopingErrHandle) + + #Server kill switch checker + killserver_task = task.LoopingCall(kill_server) + killserver = killserver_task.start(10) + killserver.addErrback(loopingErrHandle) #more threads reactor.suggestThreadPoolSize(100)