Loading src/common/Settings.py 0 → 100644 +9 −0 Original line number Diff line number Diff line import os def get_setting(name, **kwargs): value = os.environ.get(name) if 'settings' in kwargs: value = kwargs['settings'].pop(name, value) if value is not None: return value if 'default' in kwargs: return kwargs['default'] raise Exception('Setting({}) not specified in environment or configuration'.format(name)) src/common/database/Factory.py +3 −2 Original line number Diff line number Diff line import logging, os import logging from enum import Enum from common.Settings import get_setting from common.database.api.Database import Database from common.database.engines.inmemory.InMemoryDatabaseEngine import InMemoryDatabaseEngine from common.database.engines.redis.RedisDatabaseEngine import RedisDatabaseEngine Loading Loading @@ -29,7 +30,7 @@ def get_database(engine=None, **settings) -> Database: # 1. user selected by parameter (engine=...) # 2. environment variable DB_ENGINE # 3. default engine: INMEMORY if engine is None: engine = os.environ.get('DB_ENGINE', DEFAULT_DB_ENGINE) if engine is None: engine = get_setting('DB_ENGINE', default=DEFAULT_DB_ENGINE) if engine is None: raise Exception('Database Engine not specified') if isinstance(engine, DatabaseEngineEnum): engine = engine.value engine_class = ENGINES.get(engine) Loading src/common/database/engines/redis/RedisDatabaseEngine.py +5 −9 Original line number Diff line number Diff line import os, uuid import uuid from typing import Dict, List, Set, Tuple from redis.client import Redis from common.Settings import get_setting from common.database.engines._DatabaseEngine import _DatabaseEngine from common.database.engines.redis.Mutex import Mutex KEY_ENTIRE_DATABASE_LOCK = 'everything' def get_setting(settings, name): value = settings.pop(name, os.environ.get(name, None)) if value is None: raise Exception('Setting({}) not specified in environment or configuration'.format(name)) return value class RedisDatabaseEngine(_DatabaseEngine): def __init__(self, **settings) -> None: host = get_setting(settings, 'REDIS_SERVICE_HOST') port = get_setting(settings, 'REDIS_SERVICE_PORT') dbid = get_setting(settings, 'REDIS_DATABASE_ID') host = get_setting('REDIS_SERVICE_HOST', settings=settings) port = get_setting('REDIS_SERVICE_PORT', settings=settings) dbid = get_setting('REDIS_DATABASE_ID', settings=settings) self._client = Redis.from_url('redis://{host}:{port}/{dbid}'.format(host=host, port=port, dbid=dbid)) self._mutex = Mutex(self._client) Loading src/compute/Config.py +4 −0 Original line number Diff line number Diff line Loading @@ -8,5 +8,9 @@ GRPC_SERVICE_PORT = 9090 GRPC_MAX_WORKERS = 10 GRPC_GRACE_PERIOD = 60 # REST-API settings RESTAPI_SERVICE_PORT = 8080 RESTAPI_BASE_URL = '/api' # Prometheus settings METRICS_PORT = 9192 src/compute/service/__main__.py +20 −7 Original line number Diff line number Diff line import logging, os, signal, sys, threading import logging, signal, sys, threading from prometheus_client import start_http_server from compute.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD, LOG_LEVEL, METRICS_PORT from common.Settings import get_setting from compute.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD, LOG_LEVEL, RESTAPI_SERVICE_PORT, \ RESTAPI_BASE_URL, METRICS_PORT from compute.service.ComputeService import ComputeService from compute.service.rest_server.Server import Server from compute.service.rest_server.resources.Compute import Compute terminate = threading.Event() logger = None Loading @@ -14,11 +18,13 @@ def signal_handler(signal, frame): def main(): global terminate, logger grpc_service_port = os.environ.get('COMPUTESERVICE_SERVICE_PORT_GRPC', GRPC_SERVICE_PORT ) max_workers = os.environ.get('MAX_WORKERS', GRPC_MAX_WORKERS ) grace_period = os.environ.get('GRACE_PERIOD', GRPC_GRACE_PERIOD ) log_level = os.environ.get('LOG_LEVEL', LOG_LEVEL ) metrics_port = os.environ.get('METRICS_PORT', METRICS_PORT ) grpc_service_port = get_setting('COMPUTESERVICE_SERVICE_PORT_GRPC', default=GRPC_SERVICE_PORT ) max_workers = get_setting('MAX_WORKERS', default=GRPC_MAX_WORKERS ) grace_period = get_setting('GRACE_PERIOD', default=GRPC_GRACE_PERIOD ) log_level = get_setting('LOG_LEVEL', default=LOG_LEVEL ) restapi_service_port = get_setting('RESTAPI_SERVICE_PORT', default=RESTAPI_SERVICE_PORT) restapi_base_url = get_setting('RESTAPI_BASE_URL', default=RESTAPI_BASE_URL ) metrics_port = get_setting('METRICS_PORT', default=METRICS_PORT ) logging.basicConfig(level=log_level) logger = logging.getLogger(__name__) Loading @@ -35,11 +41,18 @@ def main(): grpc_service = ComputeService(port=grpc_service_port, max_workers=max_workers, grace_period=grace_period) grpc_service.start() rest_server = Server(port=restapi_service_port, base_url=restapi_base_url) rest_server.add_resource( Compute, '/restconf/config/compute', endpoint='api.compute') rest_server.start() # Wait for Ctrl+C or termination signal while not terminate.wait(timeout=0.1): pass logger.info('Terminating...') grpc_service.stop() rest_server.shutdown() rest_server.join() logger.info('Bye') return 0 Loading Loading
src/common/Settings.py 0 → 100644 +9 −0 Original line number Diff line number Diff line import os def get_setting(name, **kwargs): value = os.environ.get(name) if 'settings' in kwargs: value = kwargs['settings'].pop(name, value) if value is not None: return value if 'default' in kwargs: return kwargs['default'] raise Exception('Setting({}) not specified in environment or configuration'.format(name))
src/common/database/Factory.py +3 −2 Original line number Diff line number Diff line import logging, os import logging from enum import Enum from common.Settings import get_setting from common.database.api.Database import Database from common.database.engines.inmemory.InMemoryDatabaseEngine import InMemoryDatabaseEngine from common.database.engines.redis.RedisDatabaseEngine import RedisDatabaseEngine Loading Loading @@ -29,7 +30,7 @@ def get_database(engine=None, **settings) -> Database: # 1. user selected by parameter (engine=...) # 2. environment variable DB_ENGINE # 3. default engine: INMEMORY if engine is None: engine = os.environ.get('DB_ENGINE', DEFAULT_DB_ENGINE) if engine is None: engine = get_setting('DB_ENGINE', default=DEFAULT_DB_ENGINE) if engine is None: raise Exception('Database Engine not specified') if isinstance(engine, DatabaseEngineEnum): engine = engine.value engine_class = ENGINES.get(engine) Loading
src/common/database/engines/redis/RedisDatabaseEngine.py +5 −9 Original line number Diff line number Diff line import os, uuid import uuid from typing import Dict, List, Set, Tuple from redis.client import Redis from common.Settings import get_setting from common.database.engines._DatabaseEngine import _DatabaseEngine from common.database.engines.redis.Mutex import Mutex KEY_ENTIRE_DATABASE_LOCK = 'everything' def get_setting(settings, name): value = settings.pop(name, os.environ.get(name, None)) if value is None: raise Exception('Setting({}) not specified in environment or configuration'.format(name)) return value class RedisDatabaseEngine(_DatabaseEngine): def __init__(self, **settings) -> None: host = get_setting(settings, 'REDIS_SERVICE_HOST') port = get_setting(settings, 'REDIS_SERVICE_PORT') dbid = get_setting(settings, 'REDIS_DATABASE_ID') host = get_setting('REDIS_SERVICE_HOST', settings=settings) port = get_setting('REDIS_SERVICE_PORT', settings=settings) dbid = get_setting('REDIS_DATABASE_ID', settings=settings) self._client = Redis.from_url('redis://{host}:{port}/{dbid}'.format(host=host, port=port, dbid=dbid)) self._mutex = Mutex(self._client) Loading
src/compute/Config.py +4 −0 Original line number Diff line number Diff line Loading @@ -8,5 +8,9 @@ GRPC_SERVICE_PORT = 9090 GRPC_MAX_WORKERS = 10 GRPC_GRACE_PERIOD = 60 # REST-API settings RESTAPI_SERVICE_PORT = 8080 RESTAPI_BASE_URL = '/api' # Prometheus settings METRICS_PORT = 9192
src/compute/service/__main__.py +20 −7 Original line number Diff line number Diff line import logging, os, signal, sys, threading import logging, signal, sys, threading from prometheus_client import start_http_server from compute.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD, LOG_LEVEL, METRICS_PORT from common.Settings import get_setting from compute.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD, LOG_LEVEL, RESTAPI_SERVICE_PORT, \ RESTAPI_BASE_URL, METRICS_PORT from compute.service.ComputeService import ComputeService from compute.service.rest_server.Server import Server from compute.service.rest_server.resources.Compute import Compute terminate = threading.Event() logger = None Loading @@ -14,11 +18,13 @@ def signal_handler(signal, frame): def main(): global terminate, logger grpc_service_port = os.environ.get('COMPUTESERVICE_SERVICE_PORT_GRPC', GRPC_SERVICE_PORT ) max_workers = os.environ.get('MAX_WORKERS', GRPC_MAX_WORKERS ) grace_period = os.environ.get('GRACE_PERIOD', GRPC_GRACE_PERIOD ) log_level = os.environ.get('LOG_LEVEL', LOG_LEVEL ) metrics_port = os.environ.get('METRICS_PORT', METRICS_PORT ) grpc_service_port = get_setting('COMPUTESERVICE_SERVICE_PORT_GRPC', default=GRPC_SERVICE_PORT ) max_workers = get_setting('MAX_WORKERS', default=GRPC_MAX_WORKERS ) grace_period = get_setting('GRACE_PERIOD', default=GRPC_GRACE_PERIOD ) log_level = get_setting('LOG_LEVEL', default=LOG_LEVEL ) restapi_service_port = get_setting('RESTAPI_SERVICE_PORT', default=RESTAPI_SERVICE_PORT) restapi_base_url = get_setting('RESTAPI_BASE_URL', default=RESTAPI_BASE_URL ) metrics_port = get_setting('METRICS_PORT', default=METRICS_PORT ) logging.basicConfig(level=log_level) logger = logging.getLogger(__name__) Loading @@ -35,11 +41,18 @@ def main(): grpc_service = ComputeService(port=grpc_service_port, max_workers=max_workers, grace_period=grace_period) grpc_service.start() rest_server = Server(port=restapi_service_port, base_url=restapi_base_url) rest_server.add_resource( Compute, '/restconf/config/compute', endpoint='api.compute') rest_server.start() # Wait for Ctrl+C or termination signal while not terminate.wait(timeout=0.1): pass logger.info('Terminating...') grpc_service.stop() rest_server.shutdown() rest_server.join() logger.info('Bye') return 0 Loading