Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion docs/snippets/providers/pushover-snippet-autogenerated.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{/* This snippet is automatically generated using scripts/docs_render_provider_snippets.py
{/* This snippet is automatically generated using scripts/docs_render_provider_snippets.py
Do not edit it manually, as it will be overwritten */}

## Authentication
Expand All @@ -21,6 +21,11 @@ actions:
config: "{{ provider.my_provider_name }}"
with:
message: {value} # The content of the message.
title: {value} # Optional notification title.
priority: {value} # Message priority (-2 to 2, where 2 is emergency).
sound: {value} # Pushover sound name.
retry: {value} # Retry interval in seconds for emergency priority.
expire: {value} # Expiry in seconds for emergency priority.
```


Expand Down
56 changes: 39 additions & 17 deletions keep/providers/pushover_provider/pushover_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,30 +47,52 @@ def dispose(self):
"""
pass

def _notify(self, message=None, **kwargs: dict):
def _notify(
self,
message: str = "",
title: str | None = None,
priority: int = 0,
sound: str = "pushover",
retry: int = 60,
expire: int = 3600,
**kwargs: dict,
):
"""
Notify alert message to Pushover using the Pushover API
https://support.pushover.net/i44-example-code-and-pushover-libraries#python

Args:
message (str): The content of the message.
title (str | None): Optional notification title.
priority (int): Message priority (-2 to 2, where 2 is emergency).
sound (str): Pushover sound name.
retry (int): Retry interval in seconds for emergency priority.
expire (int): Expiry in seconds for emergency priority.
"""
self.logger.debug("Notifying alert message to Pushover")
sound = kwargs.get("sound", "pushover")
priority = int(kwargs.get("priority", 0))
retry = kwargs.get("retry", 60)
expire = kwargs.get("expire", 3600)
resp = requests.post(
"https://api.pushover.net/1/messages.json",
data={
"token": self.authentication_config.token,
"user": self.authentication_config.user_key,
"message": message,
"sound": sound,
"priority": priority,
**({"retry": retry, "expire": expire} if priority == 2 else {}),
},
)
sound = kwargs.get("sound", sound)
priority = int(kwargs.get("priority", priority))
retry = int(kwargs.get("retry", retry))
expire = int(kwargs.get("expire", expire))
title = kwargs.get("title", title)

if isinstance(message, str):
message = message.replace("<p>", "").replace("</p>", "")

data = {
"token": self.authentication_config.token,
"user": self.authentication_config.user_key,
"message": message,
"sound": sound,
"priority": priority,
**({"retry": retry, "expire": expire} if priority == 2 else {}),
}

# Add optional title if provided so Pushover shows incident name as bold title
if title:
data["title"] = title

resp = requests.post("https://api.pushover.net/1/messages.json", data=data)
resp.raise_for_status()
self.logger.debug("Alert message notified to Pushover")

Expand All @@ -97,4 +119,4 @@ def _notify(self, message=None, **kwargs: dict):
authentication={"token": pushover_token, "user_key": pushover_user_key},
)
provider = PushoverProvider(context_manager, provider_id="pushover", config=config)
provider.notify(message="Simple alert showing context with name: John Doe")
provider.notify(message="Simple alert showing context with name: John Doe")
Loading