Module jumpscale.servers.rack.rack
Expand source code
from gevent import event
from jumpscale.core.base import Base
class ServerRack(Base):
def __init__(self):
super().__init__()
self._servers = dict()
self._started = set()
self._running_event = event.Event()
def _start(self, server_name: str):
if server_name not in self._started:
self._servers[server_name].start()
self._started.add(server_name)
def _stop(self, server_name: str):
if server_name in self._started:
self._servers[server_name].stop()
self._started.remove(server_name)
def add(self, server_name, server):
"""Add new server to the rack
Args:
name (str): server name
server (object): server object
"""
if server_name in self._servers:
self._stop(server_name)
self._servers[server_name] = server
def remove(self, server_name: str):
"""Remove server (Stop it first if running)
Args:
server_name (str): server name
"""
self._stop(server_name)
if server_name in self._servers:
self._servers.pop(server_name)
if server_name in self._started:
self._started.remove(server_name)
def start(self, server_name: str = None, wait: bool = False):
"""Start server by its name or start all servers
Args:
server_name (str, optional): server name, if None will start all the servers. Defaults to None.
"""
self._running_event.clear()
if server_name:
self._start(server_name)
else:
for server_name in self._servers:
self._start(server_name)
if wait:
try:
self._running_event.wait()
except KeyboardInterrupt:
self.stop()
def stop(self, server_name: str = None):
"""Stop server by its name or stop all running servers
Args:
server_name (str, optional): server name, if None will stop all running servers. Defaults to None.
"""
if server_name:
self._stop(server_name)
else:
for server_name in self._servers:
self._stop(server_name)
self._running_event.set()
def is_running(self, server_name):
return server_name in self._started
Classes
class ServerRack
-
A simple attribute-based namespace.
SimpleNamespace(**kwargs)
base class implementation for any class with fields which supports getting/setting raw data for any instance fields.
any instance can have an optional name and a parent.
class Person(Base): name = fields.String() age = fields.Float() p = Person(name="ahmed", age="19") print(p.name, p.age)
Args
parent_
:Base
, optional- parent instance. Defaults to None.
instance_name_
:str
, optional- instance name. Defaults to None.
**values
- any given field values to initiate the instance with
Expand source code
class ServerRack(Base): def __init__(self): super().__init__() self._servers = dict() self._started = set() self._running_event = event.Event() def _start(self, server_name: str): if server_name not in self._started: self._servers[server_name].start() self._started.add(server_name) def _stop(self, server_name: str): if server_name in self._started: self._servers[server_name].stop() self._started.remove(server_name) def add(self, server_name, server): """Add new server to the rack Args: name (str): server name server (object): server object """ if server_name in self._servers: self._stop(server_name) self._servers[server_name] = server def remove(self, server_name: str): """Remove server (Stop it first if running) Args: server_name (str): server name """ self._stop(server_name) if server_name in self._servers: self._servers.pop(server_name) if server_name in self._started: self._started.remove(server_name) def start(self, server_name: str = None, wait: bool = False): """Start server by its name or start all servers Args: server_name (str, optional): server name, if None will start all the servers. Defaults to None. """ self._running_event.clear() if server_name: self._start(server_name) else: for server_name in self._servers: self._start(server_name) if wait: try: self._running_event.wait() except KeyboardInterrupt: self.stop() def stop(self, server_name: str = None): """Stop server by its name or stop all running servers Args: server_name (str, optional): server name, if None will stop all running servers. Defaults to None. """ if server_name: self._stop(server_name) else: for server_name in self._servers: self._stop(server_name) self._running_event.set() def is_running(self, server_name): return server_name in self._started
Ancestors
- Base
- types.SimpleNamespace
Methods
def add(self, server_name, server)
-
Add new server to the rack
Args
name
:str
- server name
server
:object
- server object
Expand source code
def add(self, server_name, server): """Add new server to the rack Args: name (str): server name server (object): server object """ if server_name in self._servers: self._stop(server_name) self._servers[server_name] = server
def is_running(self, server_name)
-
Expand source code
def is_running(self, server_name): return server_name in self._started
def remove(self, server_name: str)
-
Remove server (Stop it first if running)
Args
server_name
:str
- server name
Expand source code
def remove(self, server_name: str): """Remove server (Stop it first if running) Args: server_name (str): server name """ self._stop(server_name) if server_name in self._servers: self._servers.pop(server_name) if server_name in self._started: self._started.remove(server_name)
def start(self, server_name: str = None, wait: bool = False)
-
Start server by its name or start all servers
Args
server_name
:str
, optional- server name, if None will start all the servers. Defaults to None.
Expand source code
def start(self, server_name: str = None, wait: bool = False): """Start server by its name or start all servers Args: server_name (str, optional): server name, if None will start all the servers. Defaults to None. """ self._running_event.clear() if server_name: self._start(server_name) else: for server_name in self._servers: self._start(server_name) if wait: try: self._running_event.wait() except KeyboardInterrupt: self.stop()
def stop(self, server_name: str = None)
-
Stop server by its name or stop all running servers
Args
server_name
:str
, optional- server name, if None will stop all running servers. Defaults to None.
Expand source code
def stop(self, server_name: str = None): """Stop server by its name or stop all running servers Args: server_name (str, optional): server name, if None will stop all running servers. Defaults to None. """ if server_name: self._stop(server_name) else: for server_name in self._servers: self._stop(server_name) self._running_event.set()
Inherited members