X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_policy_module%2Fcore%2Fdatabase.py;h=ecaa31564b724ac589ecd951b19f04a8ae1daaf4;hb=fbb5d6d5882461137bf47c313ead6bb913f15e56;hp=5d927d0d01910c162742fb87963f024886dd97c6;hpb=cb76d133adebeda011a00b73c1df161ef3d6db8c;p=osm%2FPOL.git diff --git a/osm_policy_module/core/database.py b/osm_policy_module/core/database.py index 5d927d0..ecaa315 100644 --- a/osm_policy_module/core/database.py +++ b/osm_policy_module/core/database.py @@ -23,16 +23,18 @@ ## import datetime import logging +import os -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 peewee_migrate import Router +from playhouse.db_url import connect +from osm_policy_module import migrations 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 +46,7 @@ class BaseModel(Model): class ScalingGroup(BaseModel): nsr_id = CharField() + vnf_member_index = IntegerField() name = CharField() content = TextField() @@ -51,28 +54,30 @@ 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 create_tables(self): - try: - db.connect() - db.create_tables([ScalingGroup, ScalingPolicy, ScalingCriteria, ScalingAlarm]) - db.close() - except Exception as e: - log.exception("Error creating tables: ") + 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()