Coverity-CWE 330: Use of Insufficiently Random Values (137944 Cryptographically weak...
[osm/POL.git] / osm_policy_module / core / database.py
index 3a89652..6423b5e 100644 (file)
@@ -26,8 +26,17 @@ import logging
 import os
 from typing import Iterable, List
 
-from peewee import CharField, IntegerField, ForeignKeyField, Model, TextField, AutoField, DateTimeField, Proxy, \
-    BooleanField
+from peewee import (
+    CharField,
+    IntegerField,
+    ForeignKeyField,
+    Model,
+    TextField,
+    AutoField,
+    DateTimeField,
+    Proxy,
+    BooleanField,
+)
 from peewee_migrate import Router
 from playhouse.db_url import connect
 
@@ -56,16 +65,20 @@ class ScalingGroup(BaseModel):
 class ScalingPolicy(BaseModel):
     name = CharField()
     cooldown_time = IntegerField()
-    scale_in_operation = CharField(default='AND')
-    scale_out_operation = CharField(default='OR')
+    scale_in_operation = CharField(default="AND")
+    scale_out_operation = CharField(default="OR")
     enabled = BooleanField(default=True)
     last_scale = DateTimeField(default=datetime.datetime.now)
-    scaling_group = ForeignKeyField(ScalingGroup, related_name='scaling_policies', on_delete='CASCADE')
+    scaling_group = ForeignKeyField(
+        ScalingGroup, related_name="scaling_policies", on_delete="CASCADE"
+    )
 
 
 class ScalingCriteria(BaseModel):
     name = CharField()
-    scaling_policy = ForeignKeyField(ScalingPolicy, related_name='scaling_criterias', on_delete='CASCADE')
+    scaling_policy = ForeignKeyField(
+        ScalingPolicy, related_name="scaling_criterias", on_delete="CASCADE"
+    )
 
 
 class ScalingAlarm(BaseModel):
@@ -73,8 +86,10 @@ class ScalingAlarm(BaseModel):
     action = CharField()
     vnf_member_index = CharField()
     vdu_name = CharField()
-    scaling_criteria = ForeignKeyField(ScalingCriteria, related_name='scaling_alarms', on_delete='CASCADE')
-    last_status = CharField(default='insufficient-data')
+    scaling_criteria = ForeignKeyField(
+        ScalingCriteria, related_name="scaling_alarms", on_delete="CASCADE"
+    )
+    last_status = CharField(default="insufficient-data")
 
 
 class VnfAlarm(BaseModel):
@@ -83,17 +98,37 @@ class VnfAlarm(BaseModel):
     nsr_id = CharField()
     vnf_member_index = CharField()
     vdu_name = CharField()
+    last_action = CharField(default="insufficient-data")
+    id_suffix = IntegerField()
+    ok_ack = BooleanField(default=False)
+    alarm_ack = BooleanField(default=False)
 
 
 class AlarmAction(BaseModel):
     type = CharField()
     url = TextField()
-    alarm = ForeignKeyField(VnfAlarm, related_name='actions', on_delete='CASCADE')
+    alarm = ForeignKeyField(VnfAlarm, related_name="actions", on_delete="CASCADE")
+
+
+class HealingAction(BaseModel):
+    alarm_id = CharField()
+    recovery_action = CharField()
+    alarm_uuid = CharField(unique=True)
+    nsr_id = CharField()
+    vnfinstance_id = CharField()
+    vnf_member_index = CharField()
+    vdur_name = CharField()
+    vdu_id = CharField()
+    cooldown_time = IntegerField()
+    count_index = IntegerField()
+    last_heal = DateTimeField(default=datetime.datetime.now)
+    last_status = CharField(default="insufficient-data")
+    day1 = BooleanField(default=False)
 
 
 class DatabaseManager:
     def __init__(self, config: Config):
-        db.initialize(connect(config.get('sql', 'database_uri')))
+        db.initialize(connect(config.get("sql", "database_uri")))
 
     def create_tables(self) -> None:
         db.connect()
@@ -104,10 +139,9 @@ class DatabaseManager:
 
 
 class ScalingAlarmRepository:
-
     @staticmethod
     def list(*expressions) -> Iterable[ScalingAlarm]:
-        return ScalingAlarm.select().where(*expressions)
+        return ScalingAlarm.select().where(*expressions).__iter__()
 
     @staticmethod
     def get(*expressions, join_classes: List = None) -> ScalingAlarm:
@@ -123,10 +157,9 @@ class ScalingAlarmRepository:
 
 
 class ScalingGroupRepository:
-
     @staticmethod
     def list(*expressions) -> Iterable[ScalingGroup]:
-        return ScalingGroup.select().where(*expressions)
+        return ScalingGroup.select().where(*expressions).__iter__()
 
     @staticmethod
     def get(*expressions) -> ScalingGroup:
@@ -138,14 +171,13 @@ class ScalingGroupRepository:
 
 
 class ScalingPolicyRepository:
-
     @staticmethod
     def list(*expressions, join_classes: List = None) -> Iterable[ScalingPolicy]:
         query = ScalingPolicy.select()
         if join_classes:
             for join_class in join_classes:
                 query = query.join(join_class)
-        return query.where(*expressions)
+        return query.where(*expressions).__iter__()
 
     @staticmethod
     def get(*expressions, join_classes: List = None) -> ScalingPolicy:
@@ -161,14 +193,13 @@ class ScalingPolicyRepository:
 
 
 class ScalingCriteriaRepository:
-
     @staticmethod
     def list(*expressions, join_classes: List = None) -> Iterable[ScalingCriteria]:
         query = ScalingCriteria.select()
         if join_classes:
             for join_class in join_classes:
                 query = query.join(join_class)
-        return query.where(*expressions)
+        return query.where(*expressions).__iter__()
 
     @staticmethod
     def get(*expressions, join_classes: List = None) -> ScalingCriteria:
@@ -184,10 +215,9 @@ class ScalingCriteriaRepository:
 
 
 class VnfAlarmRepository:
-
     @staticmethod
     def list(*expressions) -> Iterable[VnfAlarm]:
-        return VnfAlarm.select().where(*expressions)
+        return VnfAlarm.select().where(*expressions).__iter__()
 
     @staticmethod
     def get(*expressions) -> VnfAlarm:
@@ -199,10 +229,9 @@ class VnfAlarmRepository:
 
 
 class AlarmActionRepository:
-
     @staticmethod
     def list(*expressions) -> Iterable[AlarmAction]:
-        return AlarmAction.select().where(*expressions)
+        return AlarmAction.select().where(*expressions).__iter__()
 
     @staticmethod
     def get(*expressions) -> AlarmAction:
@@ -211,3 +240,22 @@ class AlarmActionRepository:
     @staticmethod
     def create(**query) -> AlarmAction:
         return AlarmAction.create(**query)
+
+
+class HealingActionRepository:
+    @staticmethod
+    def list(*expressions) -> Iterable[HealingAction]:
+        log.info(
+            "### Printing healing action db alarm {}".format(
+                HealingAction.select().where(*expressions)
+            )
+        )
+        return HealingAction.select().where(*expressions).__iter__()
+
+    @staticmethod
+    def get(*expressions) -> HealingAction:
+        return HealingAction.select().where(*expressions).get()
+
+    @staticmethod
+    def create(**query) -> HealingAction:
+        return HealingAction.create(**query)