From bb6bdfab64270428f29dfa0f03d9b7c35c9faa90 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Thu, 9 Nov 2023 08:45:38 +0000 Subject: [PATCH] Bug Fix - 2305: Automated scaling of Vnf is not happening through metrics collected by feature Service KPI of VNF using exporter endpoint Change-Id: I5cbb13919539d8727aba2519a50be47f618f24c2 Signed-off-by: Rahul Kumar --- osm_policy_module/alarming/service.py | 2 ++ osm_policy_module/autoscaling/service.py | 4 +++ osm_policy_module/common/mon_client.py | 29 +++++++++++++++---- .../tests/integration/test_policy_agent.py | 12 ++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/osm_policy_module/alarming/service.py b/osm_policy_module/alarming/service.py index f5a5d9e..6466e13 100644 --- a/osm_policy_module/alarming/service.py +++ b/osm_policy_module/alarming/service.py @@ -128,6 +128,8 @@ class AlarmingService: threshold=alarm_descriptor["value"], operation=alarm_descriptor["operation"], action=str(alarm_action), + vnfr=vnfr, + vnfd=vnfd, ) alarm = VnfAlarmRepository.create( alarm_id=alarm_descriptor["alarm-id"], diff --git a/osm_policy_module/autoscaling/service.py b/osm_policy_module/autoscaling/service.py index 5869785..bad3ea0 100644 --- a/osm_policy_module/autoscaling/service.py +++ b/osm_policy_module/autoscaling/service.py @@ -195,6 +195,8 @@ class AutoscalingService: "scale-in-relational-operation" ], action="scale_in", + vnfr=vnfr, + vnfd=vnfd, ) ) alarm = ScalingAlarmRepository.create( @@ -221,6 +223,8 @@ class AutoscalingService: "scale-out-relational-operation" ], action="scale_out", + vnfr=vnfr, + vnfd=vnfd, ) alarm = ScalingAlarmRepository.create( alarm_uuid=alarm_uuid, diff --git a/osm_policy_module/common/mon_client.py b/osm_policy_module/common/mon_client.py index d5e8dfc..e9216aa 100644 --- a/osm_policy_module/common/mon_client.py +++ b/osm_policy_module/common/mon_client.py @@ -50,6 +50,8 @@ class MonClient: operation: str, statistic: str = "AVERAGE", action: str = "", + vnfr: object = None, + vnfd: object = None, ): cor_id = random.randint(1, 10e7) msg = self._build_create_alarm_payload( @@ -62,6 +64,8 @@ class MonClient: statistic, operation, action, + vnfr, + vnfd, ) log.debug("Sending create_alarm_request %s", msg) producer = AIOKafkaProducer( @@ -165,7 +169,26 @@ class MonClient: statistic: str, operation: str, action: str, + vnfr=None, + vnfd=None, ): + tags = { + "ns_id": ns_id, + "vdu_name": vdu_name, + "vnf_member_index": vnf_member_index, + } + if vnfr and vnfd: + # TODO: Change for multiple DF support + df = vnfd.get("df", [{}])[0] + if "exporters-endpoints" in df: + metric_port = df["exporters-endpoints"].get("metric-port", 9100) + if metric_name.startswith("kpi_"): + metric_name = metric_name.replace("kpi_", "") + metric_name.strip() + for vdu in vnfr["vdur"]: + if vdu["name"] == vdu_name: + vdu_ip = vdu["ip-address"] + tags = {"instance": vdu_ip + ":" + str(metric_port)} alarm_create_request = { "correlation_id": cor_id, "alarm_name": "osm_alarm_{}_{}_{}_{}".format( @@ -177,11 +200,7 @@ class MonClient: "threshold_value": threshold, "statistic": statistic, "action": action, - "tags": { - "ns_id": ns_id, - "vdu_name": vdu_name, - "vnf_member_index": vnf_member_index, - }, + "tags": tags, } msg = { "alarm_create_request": alarm_create_request, diff --git a/osm_policy_module/tests/integration/test_policy_agent.py b/osm_policy_module/tests/integration/test_policy_agent.py index e96c7e6..54b4e79 100644 --- a/osm_policy_module/tests/integration/test_policy_agent.py +++ b/osm_policy_module/tests/integration/test_policy_agent.py @@ -525,6 +525,8 @@ class PolicyModuleAgentTest(unittest.TestCase): vdu_name="cirros_ns-1-cirros_vnfd-VM-1", vnf_member_index="1", action="scale_out", + vnfr=vnfr_record_mocks[0], + vnfd=vnfd_record_mock, ) create_alarm.assert_not_called_with( metric_name="average_memory_utilization", @@ -534,6 +536,8 @@ class PolicyModuleAgentTest(unittest.TestCase): vdu_name="cirros_ns-1-cirros_vnfd-VM-1", vnf_member_index="1", action="scale_out", + vnfr=vnfr_record_mocks[0], + vnfd=vnfd_record_mock, ) create_alarm.assert_any_call( metric_name="average_memory_utilization", @@ -543,6 +547,8 @@ class PolicyModuleAgentTest(unittest.TestCase): vdu_name="cirros_ns-2-cirros_vnfd-VM-1", vnf_member_index="2", action="scale_out", + vnfr=vnfr_record_mocks[1], + vnfd=vnfd_record_mock, ) create_alarm.assert_not_called_with( metric_name="average_memory_utilization", @@ -552,6 +558,8 @@ class PolicyModuleAgentTest(unittest.TestCase): vdu_name="cirros_ns-2-cirros_vnfd-VM-1", vnf_member_index="2", action="scale_out", + vnfr=vnfr_record_mocks[1], + vnfd=vnfd_record_mock, ) scaling_record = ScalingGroup.get() self.assertEqual(scaling_record.name, "scale_cirros_vnfd-VM") @@ -593,6 +601,8 @@ class PolicyModuleAgentTest(unittest.TestCase): threshold=20.0, operation="LT", action="{'webhook': ['localhost:9090', 'localhost:9090', 'localhost:9090']}", + vnfr=vnfr_record_mocks[0], + vnfd=vnfd_record_mock, ) create_alarm.assert_any_call( metric_name="average_memory_utilization", @@ -602,6 +612,8 @@ class PolicyModuleAgentTest(unittest.TestCase): threshold=20.0, operation="LT", action="{'webhook': ['localhost:9090', 'localhost:9090', 'localhost:9090']}", + vnfr=vnfr_record_mocks[1], + vnfd=vnfd_record_mock, ) @patch.object(DbMongo, "db_connect", Mock()) -- 2.25.1