X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fcore%2Fdatabase.py;h=939abc6a640ba1053c8721182fd434263c3e5d58;hb=30d94690e5a7220fdc084139b594e0da383563c5;hp=56a12752187c9c2d84bbc4924b95508fa5b35b84;hpb=6c3e7842b5ac04959058263c88ef185da352058e;p=osm%2FMON.git diff --git a/osm_mon/core/database.py b/osm_mon/core/database.py index 56a1275..939abc6 100644 --- a/osm_mon/core/database.py +++ b/osm_mon/core/database.py @@ -23,20 +23,23 @@ ## import logging +import os +import uuid -from peewee import CharField, TextField, FloatField, Model +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__) -cfg = Config.instance() -cfg.read_environ() -db = connect(cfg.DATABASE) +db = Proxy() class BaseModel(Model): + id = AutoField(primary_key=True) class Meta: database = db @@ -50,10 +53,11 @@ class VimCredentials(BaseModel): user = CharField() password = CharField() tenant_name = CharField() - config = TextField(default='{}') + config = TextField() class Alarm(BaseModel): + uuid = CharField(unique=True) name = CharField() severity = CharField() threshold = FloatField() @@ -66,52 +70,59 @@ class Alarm(BaseModel): class DatabaseManager: + def __init__(self, config: Config): + db.initialize(connect(config.get('sql', 'database_uri'))) + def create_tables(self) -> None: - try: - db.connect() - db.create_tables([VimCredentials, Alarm]) - db.close() - except Exception: - log.exception("Error creating tables: ") + with db.atomic(): + router = Router(db, os.path.dirname(migrations.__file__)) + router.run() - def get_credentials(self, vim_uuid) -> VimCredentials: - return VimCredentials.get_or_none(VimCredentials.uuid == vim_uuid) + 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.""" - exists = VimCredentials.get_or_none(VimCredentials.uuid == vim_credentials.uuid) - if exists: - vim_credentials.uuid = exists.uuid - vim_credentials.save() - return vim_credentials + 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: - alarm = (Alarm.select() - .where(Alarm.alarm_id == alarm_id) - .get()) - return 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.""" - alarm = Alarm() - 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_id) -> None: - alarm = (Alarm.select() - .where(Alarm.alarm_id == alarm_id) - .get()) - alarm.delete() + # 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."""