##
import datetime
import logging
+import os
-from peewee import CharField, IntegerField, ForeignKeyField, Model, TextField, AutoField, DateTimeField
+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 = connect(cfg.OSMPOL_SQL_DATABASE_URI)
+db = Proxy()
class BaseModel(Model):
name = CharField()
cooldown_time = IntegerField()
last_scale = DateTimeField(default=datetime.datetime.now)
- scaling_group = ForeignKeyField(ScalingGroup, related_name='scaling_policies')
+ 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:
- log.exception("Error creating tables: ")
-
- def get_alarm(self, alarm_id: str):
- return ScalingAlarm.select().where(ScalingAlarm.alarm_id == alarm_id).get()
+ 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()