X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fcore%2Fdatabase.py;h=d1c2e6b774773f3b6f32af7d097cd95444d54bab;hb=refs%2Fchanges%2F00%2F7400%2F2;hp=2191106fc16edb33a7dc6fb0fe68381c67d4a68a;hpb=b3f86c9f43a0eb4d56487118a403c39f979ec042;p=osm%2FMON.git diff --git a/osm_mon/core/database.py b/osm_mon/core/database.py index 2191106..d1c2e6b 100644 --- a/osm_mon/core/database.py +++ b/osm_mon/core/database.py @@ -22,26 +22,32 @@ # contact: bdiaz@whitestack.com or glavado@whitestack.com ## +import json import logging +import os +import uuid -from peewee import * -from playhouse.sqlite_ext import SqliteExtDatabase +from peewee import CharField, TextField, FloatField, Model, AutoField, Proxy +from peewee_migrate import Router +from playhouse.db_url import connect -from osm_mon.plugins.OpenStack.settings import Config +from osm_mon import migrations +from osm_mon.core.config import Config log = logging.getLogger(__name__) -cfg = Config.instance() -db = SqliteExtDatabase('mon.db') +db = Proxy() class BaseModel(Model): + id = AutoField(primary_key=True) + class Meta: database = db class VimCredentials(BaseModel): - uuid = CharField() + uuid = CharField(unique=True) name = CharField() type = CharField() url = CharField() @@ -51,17 +57,101 @@ class VimCredentials(BaseModel): config = TextField() +class Alarm(BaseModel): + uuid = CharField(unique=True) + name = CharField() + severity = CharField() + threshold = FloatField() + operation = CharField() + statistic = CharField() + monitoring_param = CharField() + vdur_name = CharField() + vnf_member_index = CharField() + nsr_id = CharField() + + class DatabaseManager: - def create_tables(self): + def __init__(self, config: Config): + db.initialize(connect(config.get('sql', 'database_uri'))) + + def create_tables(self) -> None: + db.connect() + with db.atomic(): + router = Router(db, os.path.dirname(migrations.__file__)) + router.run() + db.close() + + def get_credentials(self, vim_uuid: str = None) -> VimCredentials: + db.connect() + try: + with db.atomic(): + vim_credentials = VimCredentials.get_or_none(VimCredentials.uuid == vim_uuid) + return vim_credentials + finally: + db.close() + + def save_credentials(self, vim_credentials) -> VimCredentials: + """Saves vim credentials. If a record with same uuid exists, overwrite it.""" + db.connect() + try: + 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 + finally: + db.close() + + def get_alarm(self, alarm_id) -> Alarm: + db.connect() try: - db.connect() - db.create_tables([VimCredentials]) + with db.atomic(): + alarm = (Alarm.select() + .where(Alarm.alarm_id == alarm_id) + .get()) + return alarm + finally: db.close() - except Exception as e: - log.exception("Error creating tables: ") - def get_credentials(self, vim_uuid): - return VimCredentials.get(VimCredentials.uuid == vim_uuid) + 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) + db.connect() + try: + 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 + finally: + db.close() - def save_credentials(self, vim_credentials): - vim_credentials.save() + def delete_alarm(self, alarm_uuid) -> None: + db.connect() + with db.atomic(): + alarm = (Alarm.select() + .where(Alarm.uuid == alarm_uuid) + .get()) + alarm.delete_instance() + db.close() + + 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) + config = json.loads(credentials.config) + if 'vim_type' in config: + vim_type = config['vim_type'] + return str(vim_type.lower()) + else: + return str(credentials.type)