Replaces direct use of aiokafka with osm_common message bus in agent and
[osm/POL.git] / osm_policy_module / core / database.py
index 5d927d0..330d8c5 100644 (file)
 import datetime
 import logging
 
-from peewee import CharField, IntegerField, ForeignKeyField, Model, TextField, AutoField, DateTimeField
-from playhouse.sqlite_ext import SqliteExtDatabase
+from peewee import CharField, IntegerField, ForeignKeyField, Model, TextField, AutoField, DateTimeField, Proxy
+from playhouse.db_url import connect
 
 from osm_policy_module.core.config import Config
 
 log = logging.getLogger(__name__)
-cfg = Config.instance()
 
-db = SqliteExtDatabase('policy_module.db')
+db = Proxy()
 
 
 class BaseModel(Model):
@@ -44,6 +43,7 @@ class BaseModel(Model):
 
 class ScalingGroup(BaseModel):
     nsr_id = CharField()
+    vnf_member_index = IntegerField()
     name = CharField()
     content = TextField()
 
@@ -51,28 +51,32 @@ class ScalingGroup(BaseModel):
 class ScalingPolicy(BaseModel):
     name = CharField()
     cooldown_time = IntegerField()
-    last_scale = DateTimeField(default=datetime.datetime.min)
-    scaling_group = ForeignKeyField(ScalingGroup, related_name='scaling_policies')
+    last_scale = DateTimeField(default=datetime.datetime.now)
+    scaling_group = ForeignKeyField(ScalingGroup, related_name='scaling_policies', on_delete='CASCADE')
 
 
 class ScalingCriteria(BaseModel):
     name = CharField()
-    scaling_policy = ForeignKeyField(ScalingPolicy, related_name='scaling_criterias')
+    scaling_policy = ForeignKeyField(ScalingPolicy, related_name='scaling_criterias', on_delete='CASCADE')
 
 
 class ScalingAlarm(BaseModel):
-    alarm_id = CharField()
+    alarm_uuid = CharField(unique=True)
     action = CharField()
     vnf_member_index = IntegerField()
     vdu_name = CharField()
-    scaling_criteria = ForeignKeyField(ScalingCriteria, related_name='scaling_alarms')
+    scaling_criteria = ForeignKeyField(ScalingCriteria, related_name='scaling_alarms', on_delete='CASCADE')
 
 
 class DatabaseManager:
+    def init_db(self, config: Config):
+        db.initialize(connect(config.get('sql', 'database_uri')))
+        self.create_tables()
+
     def create_tables(self):
-        try:
-            db.connect()
+        with db.atomic():
             db.create_tables([ScalingGroup, ScalingPolicy, ScalingCriteria, ScalingAlarm])
-            db.close()
-        except Exception as e:
-            log.exception("Error creating tables: ")
+
+    def get_alarm(self, alarm_uuid: str):
+        with db.atomic():
+            return ScalingAlarm.select().where(ScalingAlarm.alarm_uuid == alarm_uuid).get()