Loading src/common/Constants.py +2 −2 Original line number Diff line number Diff line Loading @@ -30,8 +30,8 @@ DEFAULT_HTTP_BIND_ADDRESS = '0.0.0.0' DEFAULT_METRICS_PORT = 9192 # Default context and topology UUIDs DEFAULT_CONTEXT_UUID = 'admin' DEFAULT_TOPOLOGY_UUID = 'admin' DEFAULT_CONTEXT_UUID = '85f78267-4c5e-4f80-ad2f-7fbaca7c62a0' DEFAULT_TOPOLOGY_UUID = '85f78267-4c5e-4f80-ad2f-7fbaca7c62a0' # Default service names class ServiceNameEnum(Enum): Loading src/context/requirements.in +3 −0 Original line number Diff line number Diff line Loading @@ -2,3 +2,6 @@ Flask==2.1.3 Flask-RESTful==0.3.9 redis==4.1.2 requests==2.27.1 sqlalchemy==1.4.40 sqlalchemy-cockroachdb psycopg2-binary src/context/service/Database.py 0 → 100644 +25 −0 Original line number Diff line number Diff line from sqlalchemy.orm import Session from context.service.database.Base import Base import logging LOGGER = logging.getLogger(__name__) class Database(Session): def __init__(self, session): super().__init__() self.session = session def query_all(self, model): result = [] with self.session() as session: for entry in session.query(model).all(): result.append(entry) return result def clear(self): with self.session() as session: engine = session.get_bind() Base.metadata.drop_all(engine) Base.metadata.create_all(engine) src/context/service/__main__.py +21 −5 Original line number Diff line number Diff line Loading @@ -15,15 +15,18 @@ import logging, signal, sys, threading from prometheus_client import start_http_server from common.Settings import get_log_level, get_metrics_port, get_setting from common.orm.Database import Database from common.orm.Factory import get_database_backend from common.message_broker.Factory import get_messagebroker_backend from common.message_broker.MessageBroker import MessageBroker from context.Config import POPULATE_FAKE_DATA from sqlalchemy.orm import sessionmaker, declarative_base from context.service.database.Base import Base from .grpc_server.ContextService import ContextService from .rest_server.Resources import RESOURCES from .rest_server.RestServer import RestServer from .Populate import populate # from models import Device, EndPoint, EndPointId, DeviceDriverEnum, DeviceOperationalStatusEnum, ConfigActionEnum, \ # ConfigRule, KpiSampleType, Base from sqlalchemy import create_engine terminate = threading.Event() LOGGER = None Loading @@ -49,18 +52,31 @@ def main(): start_http_server(metrics_port) # Get database instance database = Database(get_database_backend()) db_uri = 'cockroachdb://root@10.152.183.121:26257/defaultdb?sslmode=disable' LOGGER.debug('Connecting to DB: {}'.format(db_uri)) # engine = create_engine(db_uri, echo=False) try: engine = create_engine(db_uri) except Exception as e: LOGGER.error("Failed to connect to database.") LOGGER.error(f"{e}") return 1 Base.metadata.create_all(engine) session = sessionmaker(bind=engine) # Get message broker instance messagebroker = MessageBroker(get_messagebroker_backend()) # Starting context service grpc_service = ContextService(database, messagebroker) grpc_service = ContextService(session, messagebroker) grpc_service.start() rest_server = RestServer() for endpoint_name, resource_class, resource_url in RESOURCES: rest_server.add_resource(resource_class, resource_url, endpoint=endpoint_name, resource_class_args=(database,)) rest_server.add_resource(resource_class, resource_url, endpoint=endpoint_name, resource_class_args=(session,)) rest_server.start() populate_fake_data = get_setting('POPULATE_FAKE_DATA', default=POPULATE_FAKE_DATA) Loading src/context/service/database/Base.py 0 → 100644 +2 −0 Original line number Diff line number Diff line from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() Loading
src/common/Constants.py +2 −2 Original line number Diff line number Diff line Loading @@ -30,8 +30,8 @@ DEFAULT_HTTP_BIND_ADDRESS = '0.0.0.0' DEFAULT_METRICS_PORT = 9192 # Default context and topology UUIDs DEFAULT_CONTEXT_UUID = 'admin' DEFAULT_TOPOLOGY_UUID = 'admin' DEFAULT_CONTEXT_UUID = '85f78267-4c5e-4f80-ad2f-7fbaca7c62a0' DEFAULT_TOPOLOGY_UUID = '85f78267-4c5e-4f80-ad2f-7fbaca7c62a0' # Default service names class ServiceNameEnum(Enum): Loading
src/context/requirements.in +3 −0 Original line number Diff line number Diff line Loading @@ -2,3 +2,6 @@ Flask==2.1.3 Flask-RESTful==0.3.9 redis==4.1.2 requests==2.27.1 sqlalchemy==1.4.40 sqlalchemy-cockroachdb psycopg2-binary
src/context/service/Database.py 0 → 100644 +25 −0 Original line number Diff line number Diff line from sqlalchemy.orm import Session from context.service.database.Base import Base import logging LOGGER = logging.getLogger(__name__) class Database(Session): def __init__(self, session): super().__init__() self.session = session def query_all(self, model): result = [] with self.session() as session: for entry in session.query(model).all(): result.append(entry) return result def clear(self): with self.session() as session: engine = session.get_bind() Base.metadata.drop_all(engine) Base.metadata.create_all(engine)
src/context/service/__main__.py +21 −5 Original line number Diff line number Diff line Loading @@ -15,15 +15,18 @@ import logging, signal, sys, threading from prometheus_client import start_http_server from common.Settings import get_log_level, get_metrics_port, get_setting from common.orm.Database import Database from common.orm.Factory import get_database_backend from common.message_broker.Factory import get_messagebroker_backend from common.message_broker.MessageBroker import MessageBroker from context.Config import POPULATE_FAKE_DATA from sqlalchemy.orm import sessionmaker, declarative_base from context.service.database.Base import Base from .grpc_server.ContextService import ContextService from .rest_server.Resources import RESOURCES from .rest_server.RestServer import RestServer from .Populate import populate # from models import Device, EndPoint, EndPointId, DeviceDriverEnum, DeviceOperationalStatusEnum, ConfigActionEnum, \ # ConfigRule, KpiSampleType, Base from sqlalchemy import create_engine terminate = threading.Event() LOGGER = None Loading @@ -49,18 +52,31 @@ def main(): start_http_server(metrics_port) # Get database instance database = Database(get_database_backend()) db_uri = 'cockroachdb://root@10.152.183.121:26257/defaultdb?sslmode=disable' LOGGER.debug('Connecting to DB: {}'.format(db_uri)) # engine = create_engine(db_uri, echo=False) try: engine = create_engine(db_uri) except Exception as e: LOGGER.error("Failed to connect to database.") LOGGER.error(f"{e}") return 1 Base.metadata.create_all(engine) session = sessionmaker(bind=engine) # Get message broker instance messagebroker = MessageBroker(get_messagebroker_backend()) # Starting context service grpc_service = ContextService(database, messagebroker) grpc_service = ContextService(session, messagebroker) grpc_service.start() rest_server = RestServer() for endpoint_name, resource_class, resource_url in RESOURCES: rest_server.add_resource(resource_class, resource_url, endpoint=endpoint_name, resource_class_args=(database,)) rest_server.add_resource(resource_class, resource_url, endpoint=endpoint_name, resource_class_args=(session,)) rest_server.start() populate_fake_data = get_setting('POPULATE_FAKE_DATA', default=POPULATE_FAKE_DATA) Loading
src/context/service/database/Base.py 0 → 100644 +2 −0 Original line number Diff line number Diff line from sqlalchemy.ext.declarative import declarative_base Base = declarative_base()