From: Benjamin Diaz Date: Wed, 3 Oct 2018 17:36:49 +0000 (-0300) Subject: Refactor common_db client code X-Git-Tag: v5.0.0~19 X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FPOL.git;a=commitdiff_plain;h=be75541d2f2306f8992f47bca8179210f858c593 Refactor common_db client code Creates DbClient which exposes methods to interact with the common database, using osm_common module. Signed-off-by: Benjamin Diaz Change-Id: Ib81bb44e5f2c6ffd289380936b089af2f9e76e63 --- diff --git a/osm_policy_module/common/db_client.py b/osm_policy_module/common/db_client.py new file mode 100644 index 0000000..e93747f --- /dev/null +++ b/osm_policy_module/common/db_client.py @@ -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 diff --git a/osm_policy_module/core/agent.py b/osm_policy_module/core/agent.py index 410413f..52412a6 100644 --- a/osm_policy_module/core/agent.py +++ b/osm_policy_module/core/agent.py @@ -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'] diff --git a/osm_policy_module/tests/integration/test_policy_agent.py b/osm_policy_module/tests/integration/test_policy_agent.py index 3a82ea7..f7dc65a 100644 --- a/osm_policy_module/tests/integration/test_policy_agent.py +++ b/osm_policy_module/tests/integration/test_policy_agent.py @@ -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]: