Commit dc934c3d authored by Carlos Manso's avatar Carlos Manso
Browse files

Context model updated to SQLAlchemy

parent 17219923
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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):
+3 −0
Original line number Diff line number Diff line
@@ -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
+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)
+21 −5
Original line number Diff line number Diff line
@@ -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
@@ -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)
+2 −0
Original line number Diff line number Diff line
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Loading