Refactor common_db client code 19/6619/2
authorBenjamin Diaz <bdiaz@whitestack.com>
Wed, 3 Oct 2018 17:36:49 +0000 (14:36 -0300)
committerBenjamin Diaz <bdiaz@whitestack.com>
Thu, 4 Oct 2018 13:56:19 +0000 (10:56 -0300)
Creates DbClient which exposes methods to interact with the common
database, using osm_common module.

Signed-off-by: Benjamin Diaz <bdiaz@whitestack.com>
Change-Id: Ib81bb44e5f2c6ffd289380936b089af2f9e76e63

osm_policy_module/common/db_client.py [new file with mode: 0644]
osm_policy_module/core/agent.py
osm_policy_module/tests/integration/test_policy_agent.py

diff --git a/osm_policy_module/common/db_client.py b/osm_policy_module/common/db_client.py
new file mode 100644 (file)
index 0000000..e93747f
--- /dev/null
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+# Copyright 2018 Whitestack, LLC
+# *************************************************************
+
+# This file is part of OSM Monitoring module
+# All Rights Reserved to Whitestack, LLC
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+
+#         http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: bdiaz@whitestack.com or glavado@whitestack.com
+##
+from osm_common import dbmongo
+
+from osm_policy_module.core.config import Config
+
+
+class DbClient:
+    def __init__(self):
+        cfg = Config.instance()
+        self.common_db = dbmongo.DbMongo()
+        self.common_db.db_connect({'host': cfg.OSMPOL_DATABASE_HOST,
+                                   'port': int(cfg.OSMPOL_DATABASE_PORT),
+                                   'name': 'osm'})
+
+    def get_vnfr(self, nsr_id: str, member_index: int):
+        vnfr = self.common_db.get_one(table="vnfrs",
+                                      filter={"nsr-id-ref": nsr_id, "member-vnf-index-ref": str(member_index)})
+        return vnfr
+
+    def get_vnfrs(self, nsr_id: str):
+        return [self.get_vnfr(nsr_id, member['member-vnf-index']) for member in
+                self.get_nsr(nsr_id)['nsd']['constituent-vnfd']]
+
+    def get_vnfd(self, vnfd_id: str):
+        vnfr = self.common_db.get_one(table="vnfds",
+                                      filter={"_id": vnfd_id})
+        return vnfr
+
+    def get_nsr(self, nsr_id: str):
+        nsr = self.common_db.get_one(table="nsrs",
+                                     filter={"id": nsr_id})
+        return nsr
+
+    def get_nslcmop(self, nslcmop_id):
+        nslcmop = self.common_db.get_one(table="nslcmops",
+                                         filter={"_id": nslcmop_id})
+        return nslcmop
index 410413f..52412a6 100644 (file)
@@ -28,8 +28,8 @@ from json import JSONDecodeError
 
 import yaml
 from kafka import KafkaConsumer
-from osm_common import dbmongo
 
+from osm_policy_module.common.db_client import DbClient
 from osm_policy_module.common.lcm_client import LcmClient
 from osm_policy_module.common.mon_client import MonClient
 from osm_policy_module.core import database
@@ -42,10 +42,7 @@ log = logging.getLogger(__name__)
 class PolicyModuleAgent:
     def __init__(self):
         cfg = Config.instance()
-        self.common_db = dbmongo.DbMongo()
-        self.common_db.db_connect({'host': cfg.OSMPOL_DATABASE_HOST,
-                                   'port': int(cfg.OSMPOL_DATABASE_PORT),
-                                   'name': 'osm'})
+        self.db_client = DbClient()
         self.mon_client = MonClient()
         self.kafka_server = '{}:{}'.format(cfg.OSMPOL_MESSAGE_HOST,
                                            cfg.OSMPOL_MESSAGE_PORT)
@@ -71,8 +68,7 @@ class PolicyModuleAgent:
                     content = yaml.safe_load(msg)
                 log.info("Message arrived with topic: %s, key: %s, msg: %s", topic, key, content)
                 nslcmop_id = content['nslcmop_id']
-                nslcmop = self.common_db.get_one(table="nslcmops",
-                                                 filter={"_id": nslcmop_id})
+                nslcmop = self.db_client.get_nslcmop(nslcmop_id)
                 if nslcmop['operationState'] == 'COMPLETED' or nslcmop['operationState'] == 'PARTIALLY_COMPLETED':
                     nsr_id = nslcmop['nsInstanceId']
                     log.info("Configuring scaling groups for network service with nsr_id: %s", nsr_id)
@@ -116,32 +112,13 @@ class PolicyModuleAgent:
         except Exception:
             log.exception("Error consuming message: ")
 
-    def _get_vnfr(self, nsr_id: str, member_index: int):
-        vnfr = self.common_db.get_one(table="vnfrs",
-                                      filter={"nsr-id-ref": nsr_id, "member-vnf-index-ref": str(member_index)})
-        return vnfr
-
-    def _get_vnfrs(self, nsr_id: str):
-        return [self._get_vnfr(nsr_id, member['member-vnf-index']) for member in
-                self._get_nsr(nsr_id)['nsd']['constituent-vnfd']]
-
-    def _get_vnfd(self, vnfd_id: str):
-        vnfr = self.common_db.get_one(table="vnfds",
-                                      filter={"_id": vnfd_id})
-        return vnfr
-
-    def _get_nsr(self, nsr_id: str):
-        nsr = self.common_db.get_one(table="nsrs",
-                                     filter={"id": nsr_id})
-        return nsr
-
     def _configure_scaling_groups(self, nsr_id: str):
         # TODO(diazb): Check for alarm creation on exception and clean resources if needed.
         with database.db.atomic():
-            vnfrs = self._get_vnfrs(nsr_id)
+            vnfrs = self.db_client.get_vnfrs(nsr_id)
             log.info("Checking %s vnfrs...", len(vnfrs))
             for vnfr in vnfrs:
-                vnfd = self._get_vnfd(vnfr['vnfd-id'])
+                vnfd = self.db_client.get_vnfd(vnfr['vnfd-id'])
                 log.info("Looking for vnfd %s", vnfr['vnfd-id'])
                 scaling_groups = vnfd['scaling-group-descriptor']
                 vnf_monitoring_params = vnfd['monitoring-param']
index 3a82ea7..f7dc65a 100644 (file)
@@ -31,6 +31,7 @@ from kafka import KafkaProducer
 from osm_common.dbmongo import DbMongo
 from peewee import SqliteDatabase
 
+from osm_policy_module.common.db_client import DbClient
 from osm_policy_module.common.mon_client import MonClient
 from osm_policy_module.core import database
 from osm_policy_module.core.agent import PolicyModuleAgent
@@ -419,9 +420,9 @@ class PolicyModuleAgentTest(unittest.TestCase):
     @patch.object(DbMongo, 'db_connect', Mock())
     @patch.object(KafkaProducer, '__init__')
     @patch.object(MonClient, 'create_alarm')
-    @patch.object(PolicyModuleAgent, '_get_vnfd')
-    @patch.object(PolicyModuleAgent, '_get_nsr')
-    @patch.object(PolicyModuleAgent, '_get_vnfr')
+    @patch.object(DbClient, 'get_vnfd')
+    @patch.object(DbClient, 'get_nsr')
+    @patch.object(DbClient, 'get_vnfr')
     def test_configure_scaling_groups(self, get_vnfr, get_nsr, get_vnfd, create_alarm, kafka_producer_init):
         def _test_configure_scaling_groups_get_vnfr(*args, **kwargs):
             if '1' in args[1]: