X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_policy_module%2Fautoscaling%2Fservice.py;h=bad3ea008f8b2b2d7d8ddba14b802b4ad5086b4e;hb=HEAD;hp=fd96da377af0eff20930063b9565720c144e5c37;hpb=d37c54c64eec65c9a3c490a31eef3a02a76cb474;p=osm%2FPOL.git diff --git a/osm_policy_module/autoscaling/service.py b/osm_policy_module/autoscaling/service.py index fd96da3..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, @@ -358,48 +362,49 @@ class AutoscalingService: async def evaluate_policy(self, alarm_uuid): database.db.connect() try: - with database.db.atomic(): - alarm = ScalingAlarmRepository.get( - ScalingAlarm.alarm_uuid == alarm_uuid - ) - vnf_member_index = alarm.vnf_member_index - action = alarm.action - scaling_policy = alarm.scaling_criteria.scaling_policy - if not scaling_policy.enabled: - return - if action == "scale_in": - operation = scaling_policy.scale_in_operation - elif action == "scale_out": - operation = scaling_policy.scale_out_operation - else: - raise Exception("Unknown alarm action {}".format(alarm.action)) - alarms = ScalingAlarmRepository.list( - ScalingAlarm.scaling_criteria == alarm.scaling_criteria, - ScalingAlarm.action == alarm.action, - ScalingAlarm.vnf_member_index == vnf_member_index, - ScalingAlarm.vdu_name == alarm.vdu_name, - ) - statuses = [] - for alarm in alarms: - statuses.append(alarm.last_status) - if (operation == "AND" and set(statuses) == {"alarm"}) or ( - operation == "OR" and "alarm" in statuses - ): - delta = datetime.datetime.now() - scaling_policy.last_scale - if delta.total_seconds() > scaling_policy.cooldown_time: - log.info( - "Sending %s action message for ns: %s", - alarm.action, - scaling_policy.scaling_group.nsr_id, - ) - await self.lcm_client.scale( - scaling_policy.scaling_group.nsr_id, - scaling_policy.scaling_group.name, - vnf_member_index, - action, - ) - scaling_policy.last_scale = datetime.datetime.now() - scaling_policy.save() + if self.conf.get("autoscale", "enabled") == "True": + with database.db.atomic(): + alarm = ScalingAlarmRepository.get( + ScalingAlarm.alarm_uuid == alarm_uuid + ) + vnf_member_index = alarm.vnf_member_index + action = alarm.action + scaling_policy = alarm.scaling_criteria.scaling_policy + if not scaling_policy.enabled: + return + if action == "scale_in": + operation = scaling_policy.scale_in_operation + elif action == "scale_out": + operation = scaling_policy.scale_out_operation + else: + raise Exception("Unknown alarm action {}".format(alarm.action)) + alarms = ScalingAlarmRepository.list( + ScalingAlarm.scaling_criteria == alarm.scaling_criteria, + ScalingAlarm.action == alarm.action, + ScalingAlarm.vnf_member_index == vnf_member_index, + ScalingAlarm.vdu_name == alarm.vdu_name, + ) + statuses = [] + for alarm in alarms: + statuses.append(alarm.last_status) + if (operation == "AND" and set(statuses) == {"alarm"}) or ( + operation == "OR" and "alarm" in statuses + ): + delta = datetime.datetime.now() - scaling_policy.last_scale + if delta.total_seconds() > scaling_policy.cooldown_time: + log.info( + "Sending %s action message for ns: %s", + alarm.action, + scaling_policy.scaling_group.nsr_id, + ) + await self.lcm_client.scale( + scaling_policy.scaling_group.nsr_id, + scaling_policy.scaling_group.name, + vnf_member_index, + action, + ) + scaling_policy.last_scale = datetime.datetime.now() + scaling_policy.save() except ScalingAlarm.DoesNotExist: log.debug(