Skip to content

Commit

Permalink
Add current_alerts field to NrpeTargetsChangedEvent (#100)
Browse files Browse the repository at this point in the history
  • Loading branch information
sed-i authored Nov 21, 2023
1 parent a374516 commit 9803d99
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 5 deletions.
9 changes: 7 additions & 2 deletions lib/charms/nrpe_exporter/v0/nrpe_exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@

# Increment this PATCH version before using `charmcraft publish-lib` or reset
# to 0 if you are raising the major API version
LIBPATCH = 3
LIBPATCH = 4


logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -205,12 +205,14 @@ def __init__(
handle,
relation_id,
current_targets: List[Dict[str, Any]],
current_alerts: List[Dict[str, Any]],
removed_targets: List[str],
removed_alerts: List[str],
):
super().__init__(handle)
self.relation_id = relation_id
self.current_targets = current_targets
self.current_alerts = current_alerts
self.removed_targets = removed_targets or []
self.removed_alerts = removed_alerts or []

Expand All @@ -219,6 +221,7 @@ def snapshot(self):
return {
"relation_id": self.relation_id,
"current_targets": self.current_targets,
"current_alerts": self.current_alerts,
"removed_targets": self.removed_targets,
"removed_alerts": self.removed_alerts,
}
Expand All @@ -227,6 +230,7 @@ def restore(self, snapshot):
"""Restore target relation information."""
self.relation_id = snapshot["relation_id"]
self.current_targets = _type_convert_stored(snapshot["current_targets"])
self.current_alerts = _type_convert_stored(snapshot["current_alerts"])
self.removed_targets = _type_convert_stored(snapshot["removed_targets"])
self.removed_alerts = _type_convert_stored(snapshot["removed_alerts"])

Expand Down Expand Up @@ -312,6 +316,7 @@ def _on_nrpe_relation_changed(self, event: RelationEvent):
self.on.nrpe_targets_changed.emit( # pyright: ignore
relation_id=rel_id,
current_targets=nrpe_endpoints,
current_alerts=nrpe_alerts,
removed_targets=removed_endpoints,
removed_alerts=removed_alerts,
)
Expand Down Expand Up @@ -450,7 +455,7 @@ def _generate_alert(self, relation, cmd, id, unit) -> dict:
"""Generate an on-the-fly Alert rule."""
return {
"alert": "{}NrpeAlert".format("".join([x.title() for x in cmd.split("_")])),
# Average over 5 minutes considering a 60 second scrape interval
# Average over 5 minutes considering a 60-second scrape interval
"expr": "avg_over_time(command_status{{juju_unit='{}',command='{}'}}[15m]) > 1".format(
re.sub(r"^(.*?)[-_](\d+)$", r"\1/\2", id.replace("_", "-")), cmd
)
Expand Down
5 changes: 2 additions & 3 deletions src/charm.py
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@ def _on_nrpe_targets_changed(self, event):

nrpes = cast(List[Dict[str, Any]], event.current_targets)
else:
# If the event arg is None, then the stored state value is already up to date.
# If the event arg is None, then the stored state value is already up-to-date.
nrpes = self.nrpe_exporter.endpoints()

self._modify_enrichment_file(endpoints=nrpes)
Expand All @@ -472,8 +472,7 @@ def _on_nrpe_targets_changed(self, event):
nrpe["target"], nrpe["app_name"], **nrpe["additional_fields"]
)

alerts = self.nrpe_exporter.alerts()
for alert in alerts:
for alert in event.current_alerts:
self.metrics_aggregator.set_alert_rule_data(
re.sub(r"/", "_", alert["labels"]["juju_unit"]),
alert,
Expand Down

0 comments on commit 9803d99

Please sign in to comment.