- metric_value = self._get_metric_value(alarm.metric, alarm.tags)
- if alarm.alarm_status.upper() != AlarmStatus.DISABLED.value.upper():
- if metric_value is None:
- log.warning("No metric result for alarm %s", alarm.uuid)
- self.queue.put((alarm, AlarmStatus.INSUFFICIENT))
- else:
- if (
- (alarm.operation.upper() == "GT" and metric_value > alarm.threshold)
- or (
- alarm.operation.upper() == "LT"
- and metric_value < alarm.threshold
- )
- or (
- alarm.operation.upper() == "GE"
- and metric_value >= alarm.threshold
- )
- or (
- alarm.operation.upper() == "LE"
- and metric_value <= alarm.threshold
- )
- or (
- alarm.operation.upper() == "EQ"
- and metric_value == alarm.threshold
- )
- or (
- alarm.operation.upper() == "NE"
- and metric_value != alarm.threshold
- )
- ):
- self.queue.put((alarm, AlarmStatus.ALARM))
- elif alarm.operation.upper() in ("GT", "LT", "GE", "LE", "EQ", "NE"):
- self.queue.put((alarm, AlarmStatus.OK))
+ metric_data = self._get_metric_data(alarm.metric, alarm.tags)
+ if metric_data is None:
+ log.warning("No metric result for alarm %s", alarm.uuid)
+ self.queue.put((alarm, AlarmStatus.INSUFFICIENT))
+ else:
+ for metric in metric_data:
+ metric_value = metric["value"]
+ metric_labels = metric["labels"]
+ alarm.extra_labels.update(metric_labels)
+ if alarm.alarm_status.upper() != AlarmStatus.DISABLED.value.upper():
+ if (
+ (
+ alarm.operation.upper() == "GT"
+ and metric_value > alarm.threshold
+ )
+ or (
+ alarm.operation.upper() == "LT"
+ and metric_value < alarm.threshold
+ )
+ or (
+ alarm.operation.upper() == "GE"
+ and metric_value >= alarm.threshold
+ )
+ or (
+ alarm.operation.upper() == "LE"
+ and metric_value <= alarm.threshold
+ )
+ or (
+ alarm.operation.upper() == "EQ"
+ and metric_value == alarm.threshold
+ )
+ or (
+ alarm.operation.upper() == "NE"
+ and metric_value != alarm.threshold
+ )
+ ):
+ self.queue.put((alarm, AlarmStatus.ALARM))
+ elif alarm.operation.upper() in (
+ "GT",
+ "LT",
+ "GE",
+ "LE",
+ "EQ",
+ "NE",
+ ):
+ self.queue.put((alarm, AlarmStatus.OK))