feat(prometheus): store mon job into prometheus collection, part of the decoupling...
[osm/MON.git] / osm_mon / server / service.py
index 1d546e3..94bdf4e 100755 (executable)
 # contact: bdiaz@whitestack.com or glavado@whitestack.com
 ##
 import logging
-import uuid
 
-from osm_mon.core import database
 from osm_mon.core.common_db import CommonDbClient
 from osm_mon.core.config import Config
-from osm_mon.core.database import AlarmRepository, Alarm, AlarmTagRepository
+from osm_mon.core.models import Alarm
 
 log = logging.getLogger(__name__)
 
 
 class ServerService:
-
     def __init__(self, config: Config):
         self.common_db = CommonDbClient(config)
 
-    def create_alarm(self,
-                     name: str,
-                     threshold: str,
-                     operation: str,
-                     severity: str,
-                     statistic: str,
-                     metric_name: str,
-                     tags: dict) -> Alarm:
-        database.db.connect()
-        try:
-            with database.db.atomic():
-                alarm = AlarmRepository.create(
-                    uuid=str(uuid.uuid4()),
-                    name=name,
-                    threshold=threshold,
-                    operation=operation.lower(),
-                    severity=severity.lower(),
-                    statistic=statistic.lower(),
-                    metric=metric_name
-                )
-                for k, v in tags.items():
-                    AlarmTagRepository.create(
-                        name=k,
-                        value=v,
-                        alarm=alarm
-                    )
-                return alarm
+    def create_alarm(
+        self,
+        name: str,
+        threshold: float,
+        operation: str,
+        severity: str,
+        statistic: str,
+        metric_name: str,
+        tags: dict,
+    ) -> Alarm:
+        log.debug("create_alarm")
+        alarm = Alarm(
+            name, severity, threshold, operation, statistic, metric_name, tags
+        )
+        self.common_db.create_alarm(alarm)
+        log.info("Alarm %s created", alarm.name)
+        return alarm
 
-        finally:
-            database.db.close()
+    def delete_alarm(self, alarm_uuid: str) -> None:
+        log.debug("delete_alarm")
+        self.common_db.delete_alarm(alarm_uuid)
+        log.info("Alarm %s is deleted", alarm_uuid)
 
-    def delete_alarm(self,
-                     alarm_uuid: str) -> None:
-        database.db.connect()
-        try:
-            with database.db.atomic():
-                alarm = AlarmRepository.get(Alarm.uuid == alarm_uuid)
-                alarm.delete_instance()
-        finally:
-            database.db.close()
+    def populate_prometheus(self):
+        # This method can be executed infinite number of times
+        # without side-effects.
+        self.common_db.common_db.set_one(
+            "prometheus_jobs", {"job_name": "mon_exporter"}, {
+                "job_name": "mon_exporter",
+                "static_configs": [
+                    {
+                        "targets": [
+                            "mon:8000"
+                        ]
+                    }
+                ]
+            },
+            fail_on_empty=False,
+            upsert=True
+        )