1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-11-28 11:18:11 +00:00

Builtin destination to shutdown the server.

This commit is contained in:
grossmj 2014-03-31 18:36:45 -06:00
parent ab02925f98
commit a92da02973
5 changed files with 15 additions and 0 deletions

View File

@ -140,6 +140,11 @@ class JSONRPCWebSocket(tornado.websocket.WebSocketHandler):
# This is a notification, silently ignore this error... # This is a notification, silently ignore this error...
return return
if method.startswith("builtin"):
log.info("calling built-in method {}".format(method))
self.destinations[method]()
return
module = self.destinations[method] module = self.destinations[method]
# ZMQ requests are encoded in JSON # ZMQ requests are encoded in JSON
# format is a JSON array: [session ID, JSON-RPC request] # format is a JSON array: [session ID, JSON-RPC request]

View File

@ -113,6 +113,8 @@ class IModule(multiprocessing.Process):
signals = [signal.SIGTERM, signal.SIGINT] signals = [signal.SIGTERM, signal.SIGINT]
if not sys.platform.startswith("win"): if not sys.platform.startswith("win"):
signals.extend([signal.SIGHUP, signal.SIGQUIT]) signals.extend([signal.SIGHUP, signal.SIGQUIT])
else:
signals.extend([signal.SIGBREAK])
for sig in signals: for sig in signals:
signal.signal(sig, signal_handler) signal.signal(sig, signal_handler)

View File

@ -127,6 +127,8 @@ class Dynamips(IModule):
Properly stops the module. Properly stops the module.
""" """
#if not sys.platform.startswith("win32"):
# self._callback.stop()
if self._hypervisor_manager: if self._hypervisor_manager:
self._hypervisor_manager.stop_all_hypervisors() self._hypervisor_manager.stop_all_hypervisors()
IModule.stop(self) # this will stop the I/O loop IModule.stop(self) # this will stop the I/O loop

View File

@ -95,6 +95,7 @@ class IOU(IModule):
Properly stops the module. Properly stops the module.
""" """
#self._iou_callback.stop()
# delete all IOU instances # delete all IOU instances
for iou_id in self._iou_instances: for iou_id in self._iou_instances:
iou_instance = self._iou_instances[iou_id] iou_instance = self._iou_instances[iou_id]

View File

@ -107,6 +107,9 @@ class Server(object):
# instance.start() # starts the new process # instance.start() # starts the new process
#======================================================================= #=======================================================================
# special built-in destination to stop the server
JSONRPCWebSocket.register_destination("builtin.stop", self._cleanup)
for module in MODULES: for module in MODULES:
instance = module(module.__name__.lower(), instance = module(module.__name__.lower(),
"127.0.0.1", # ZeroMQ server address "127.0.0.1", # ZeroMQ server address
@ -151,6 +154,8 @@ class Server(object):
signals = [signal.SIGTERM, signal.SIGINT] signals = [signal.SIGTERM, signal.SIGINT]
if not sys.platform.startswith("win"): if not sys.platform.startswith("win"):
signals.extend([signal.SIGHUP, signal.SIGQUIT]) signals.extend([signal.SIGHUP, signal.SIGQUIT])
else:
signals.extend([signal.SIGBREAK])
for sig in signals: for sig in signals:
signal.signal(sig, signal_handler) signal.signal(sig, signal_handler)