def notify(self, check): pieces = self.channel.value.split("|") user_key, prio = pieces[0], pieces[1] # The third element, if present, is the priority for "up" events if len(pieces) == 3 and check.status == "up": prio = pieces[2] from hc.api.models import TokenBucket if not TokenBucket.authorize_pushover(user_key): return "Rate limit exceeded" others = self.checks().filter(status="down").exclude(code=check.code) # list() executes the query, to avoid DB access while # rendering a template ctx = {"check": check, "down_checks": list(others)} text = tmpl("pushover_message.html", **ctx) title = tmpl("pushover_title.html", **ctx) payload = { "token": settings.PUSHOVER_API_TOKEN, "user": user_key, "message": text, "title": title, "html": 1, "priority": int(prio), } # Emergency notification if prio == "2": payload["retry"] = settings.PUSHOVER_EMERGENCY_RETRY_DELAY payload["expire"] = settings.PUSHOVER_EMERGENCY_EXPIRATION return self.post(self.URL, data=payload)
def notify(self, check) -> None: pieces = self.channel.value.split("|") user_key, down_prio = pieces[0], pieces[1] # The third element, if present, is the priority for "up" events up_prio = down_prio if len(pieces) == 3: up_prio = pieces[2] from hc.api.models import TokenBucket if not TokenBucket.authorize_pushover(user_key): raise TransportError("Rate limit exceeded") # If down events have the emergency priority, # send a cancel call first if check.status == "up" and down_prio == "2": url = self.CANCEL_TMPL % check.unique_key cancel_payload = {"token": settings.PUSHOVER_API_TOKEN} self.post(url, data=cancel_payload) ctx = {"check": check, "down_checks": self.down_checks(check)} text = tmpl("pushover_message.html", **ctx) title = tmpl("pushover_title.html", **ctx) prio = up_prio if check.status == "up" else down_prio payload = { "token": settings.PUSHOVER_API_TOKEN, "user": user_key, "message": text, "title": title, "html": 1, "priority": int(prio), "tags": check.unique_key, } # Emergency notification if prio == "2": payload["retry"] = settings.PUSHOVER_EMERGENCY_RETRY_DELAY payload["expire"] = settings.PUSHOVER_EMERGENCY_EXPIRATION self.post(self.URL, data=payload)