3ca2e33e21aa87ae7b6e1dd501f32ac3eacede0b
[osm/POL.git] / osm_policy_module / core / database.py
1 # -*- coding: utf-8 -*-
2
3 # Copyright 2018 Whitestack, LLC
4 # *************************************************************
5
6 # This file is part of OSM Monitoring module
7 # All Rights Reserved to Whitestack, LLC
8
9 # Licensed under the Apache License, Version 2.0 (the "License"); you may
10 # not use this file except in compliance with the License. You may obtain
11 # a copy of the License at
12
13 # http://www.apache.org/licenses/LICENSE-2.0
14
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
17 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
18 # License for the specific language governing permissions and limitations
19 # under the License.
20
21 # For those usages not covered by the Apache License, Version 2.0 please
22 # contact: bdiaz@whitestack.com or glavado@whitestack.com
23 ##
24 import datetime
25 import logging
26 import os
27
28 from peewee import CharField, IntegerField, ForeignKeyField, Model, TextField, AutoField, DateTimeField, Proxy
29 from peewee_migrate import Router
30 from playhouse.db_url import connect
31
32 from osm_policy_module import migrations
33 from osm_policy_module.core.config import Config
34
35 log = logging.getLogger(__name__)
36
37 db = Proxy()
38
39
40 class BaseModel(Model):
41 id = AutoField(primary_key=True)
42
43 class Meta:
44 database = db
45
46
47 class ScalingGroup(BaseModel):
48 nsr_id = CharField()
49 vnf_member_index = IntegerField()
50 name = CharField()
51 content = TextField()
52
53
54 class ScalingPolicy(BaseModel):
55 name = CharField()
56 cooldown_time = IntegerField()
57 last_scale = DateTimeField(default=datetime.datetime.now)
58 scaling_group = ForeignKeyField(ScalingGroup, related_name='scaling_policies', on_delete='CASCADE')
59
60
61 class ScalingCriteria(BaseModel):
62 name = CharField()
63 scaling_policy = ForeignKeyField(ScalingPolicy, related_name='scaling_criterias', on_delete='CASCADE')
64
65
66 class ScalingAlarm(BaseModel):
67 alarm_uuid = CharField(unique=True)
68 action = CharField()
69 vnf_member_index = IntegerField()
70 vdu_name = CharField()
71 scaling_criteria = ForeignKeyField(ScalingCriteria, related_name='scaling_alarms', on_delete='CASCADE')
72
73
74 class DatabaseManager:
75 def __init__(self, config: Config):
76 db.initialize(connect(config.get('sql', 'database_uri')))
77
78 def create_tables(self) -> None:
79 with db.atomic():
80 router = Router(db, os.path.dirname(migrations.__file__))
81 router.run()
82
83 def get_alarm(self, alarm_uuid: str):
84 with db.atomic():
85 return ScalingAlarm.select().where(ScalingAlarm.alarm_uuid == alarm_uuid).get()