X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=osm_mon%2Fcore%2Fdatabase.py;h=2f51b1e063fb4911ef803ef3892ec67fef350399;hb=a97bdb3eafa4f3d07d61d32635f7f36f5cc36c58;hp=4cbd75f8fe60e6c0e7434158befb72f51b539016;hpb=b525e6c8619d494d4e254def394cf5b62de4df4a;p=osm%2FMON.git diff --git a/osm_mon/core/database.py b/osm_mon/core/database.py index 4cbd75f..2f51b1e 100644 --- a/osm_mon/core/database.py +++ b/osm_mon/core/database.py @@ -23,12 +23,15 @@ ## import logging -import uuid +import os +from typing import Iterable from peewee import CharField, TextField, FloatField, Model, AutoField, Proxy +from peewee_migrate import Router from playhouse.db_url import connect -from osm_mon.core.settings import Config +from osm_mon import migrations +from osm_mon.core.config import Config log = logging.getLogger(__name__) @@ -50,7 +53,7 @@ class VimCredentials(BaseModel): user = CharField() password = CharField() tenant_name = CharField() - config = TextField(default='{}') + config = TextField() class Alarm(BaseModel): @@ -67,62 +70,43 @@ class Alarm(BaseModel): class DatabaseManager: - def __init__(self): - cfg = Config.instance() - cfg.read_environ() - db.initialize(connect(cfg.DATABASE)) + def __init__(self, config: Config): + db.initialize(connect(config.get('sql', 'database_uri'))) def create_tables(self) -> None: + db.connect() with db.atomic(): - db.create_tables([VimCredentials, Alarm]) - - def get_credentials(self, vim_uuid: str = None) -> VimCredentials: - with db.atomic(): - return VimCredentials.get_or_none(VimCredentials.uuid == vim_uuid) - - def save_credentials(self, vim_credentials) -> VimCredentials: - """Saves vim credentials. If a record with same uuid exists, overwrite it.""" - with db.atomic(): - exists = VimCredentials.get_or_none(VimCredentials.uuid == vim_credentials.uuid) - if exists: - vim_credentials.id = exists.id - vim_credentials.save() - return vim_credentials - - def get_alarm(self, alarm_id) -> Alarm: - with db.atomic(): - alarm = (Alarm.select() - .where(Alarm.alarm_id == alarm_id) - .get()) - return alarm - - def save_alarm(self, name, threshold, operation, severity, statistic, metric_name, vdur_name, - vnf_member_index, nsr_id) -> Alarm: - """Saves alarm.""" - # TODO: Add uuid optional param and check if exists to handle updates (see self.save_credentials) - with db.atomic(): - alarm = Alarm() - alarm.uuid = str(uuid.uuid4()) - alarm.name = name - alarm.threshold = threshold - alarm.operation = operation - alarm.severity = severity - alarm.statistic = statistic - alarm.monitoring_param = metric_name - alarm.vdur_name = vdur_name - alarm.vnf_member_index = vnf_member_index - alarm.nsr_id = nsr_id - alarm.save() - return alarm - - def delete_alarm(self, alarm_uuid) -> None: - with db.atomic(): - alarm = (Alarm.select() - .where(Alarm.uuid == alarm_uuid) - .get()) - alarm.delete_instance() - - def get_vim_type(self, vim_account_id) -> str: - """Get the vim type that is required by the message.""" - credentials = self.get_credentials(vim_account_id) - return str(credentials.type) + router = Router(db, os.path.dirname(migrations.__file__)) + router.run() + db.close() + + +class VimCredentialsRepository: + @staticmethod + def upsert(**query) -> VimCredentials: + vim_credentials = VimCredentials.get_or_none(**query) + if vim_credentials: + query.update({'id': vim_credentials.id}) + vim_id = VimCredentials.insert(**query).on_conflict_replace().execute() + return VimCredentials.get(id=vim_id) + + @staticmethod + def get(*expressions) -> VimCredentials: + return VimCredentials.select().where(*expressions).get() + + +class AlarmRepository: + @staticmethod + def create(**query) -> Alarm: + return Alarm.create(**query) + + @staticmethod + def get(*expressions) -> Alarm: + return Alarm.select().where(*expressions).get() + + @staticmethod + def list(*expressions) -> Iterable[Alarm]: + if expressions == (): + return Alarm.select() + else: + return Alarm.select().where(*expressions)