diff --git a/README.md b/README.md
index 8a2ef56f..a62acabd 100644
--- a/README.md
+++ b/README.md
@@ -1107,15 +1107,16 @@ endpoints:
#### Configuring Pushover alerts
-| Parameter | Description | Default |
-|:---------------------------------------|:------------------------------------------------------------------------------------------------|:-----------------------------|
-| `alerting.pushover` | Configuration for alerts of type `pushover` | `{}` |
-| `alerting.pushover.application-token` | Pushover application token | `""` |
-| `alerting.pushover.user-key` | User or group key | `""` |
-| `alerting.pushover.title` | Fixed title for all messages sent via Pushover | Name of your App in Pushover |
-| `alerting.pushover.priority` | Priority of all messages, ranging from -2 (very low) to 2 (emergency) | `0` |
-| `alerting.pushover.sound` | Sound of all messages
See [sounds](https://pushover.net/api#sounds) for all valid choices. | `""` |
-| `alerting.pushover.default-alert` | Default alert configuration.
See [Setting a default alert](#setting-a-default-alert) | N/A |
+| Parameter | Description | Default |
+|:--------------------------------------|:------------------------------------------------------------------------------------------------|:-----------------------------|
+| `alerting.pushover` | Configuration for alerts of type `pushover` | `{}` |
+| `alerting.pushover.application-token` | Pushover application token | `""` |
+| `alerting.pushover.user-key` | User or group key | `""` |
+| `alerting.pushover.title` | Fixed title for all messages sent via Pushover | Name of your App in Pushover |
+| `alerting.pushover.priority` | Priority of all messages, ranging from -2 (very low) to 2 (emergency) | `0` |
+| `alerting.pushover.resolved-priority` | Override the priority of messages on resolved, ranging from -2 (very low) to 2 (emergency) | `0` |
+| `alerting.pushover.sound` | Sound of all messages
See [sounds](https://pushover.net/api#sounds) for all valid choices. | `""` |
+| `alerting.pushover.default-alert` | Default alert configuration.
See [Setting a default alert](#setting-a-default-alert) | N/A |
```yaml
alerting:
@@ -2274,7 +2275,7 @@ The path to generate a badge is the following:
/api/v1/endpoints/{key}/uptimes/{duration}/badge.svg
```
Where:
-- `{duration}` is `30d` (alpha), `7d`, `24h` or `1h`
+- `{duration}` is `30d` (alpha), `7d`, `24h` or `1h`
- `{key}` has the pattern `_` in which both variables have ` `, `/`, `_`, `,` and `.` replaced by `-`.
For instance, if you want the uptime during the last 24 hours from the endpoint `frontend` in the group `core`,
diff --git a/alerting/provider/pushover/pushover.go b/alerting/provider/pushover/pushover.go
index b90b17a5..7cfa7715 100644
--- a/alerting/provider/pushover/pushover.go
+++ b/alerting/provider/pushover/pushover.go
@@ -34,6 +34,10 @@ type AlertProvider struct {
// default: 0
Priority int `yaml:"priority,omitempty"`
+ // Priority of resolved messages, ranging from -2 (very low) to 2 (Emergency)
+ // default: 0
+ ResolvedPriority int `yaml:"resolved-priority,omitempty"`
+
// Sound of the messages (see: https://pushover.net/api#sounds)
// default: "" (pushover)
Sound string `yaml:"sound,omitempty"`
@@ -47,7 +51,10 @@ func (provider *AlertProvider) IsValid() bool {
if provider.Priority == 0 {
provider.Priority = defaultPriority
}
- return len(provider.ApplicationToken) == 30 && len(provider.UserKey) == 30 && provider.Priority >= -2 && provider.Priority <= 2
+ if provider.ResolvedPriority == 0 {
+ provider.ResolvedPriority = defaultPriority
+ }
+ return len(provider.ApplicationToken) == 30 && len(provider.UserKey) == 30 && provider.Priority >= -2 && provider.Priority <= 2 && provider.ResolvedPriority >= -2 && provider.ResolvedPriority <= 2
}
// Send an alert using the provider
@@ -93,16 +100,22 @@ func (provider *AlertProvider) buildRequestBody(ep *endpoint.Endpoint, alert *al
User: provider.UserKey,
Title: provider.Title,
Message: message,
- Priority: provider.priority(),
+ Priority: provider.priority(resolved),
Sound: provider.Sound,
})
return body
}
-func (provider *AlertProvider) priority() int {
- if provider.Priority == 0 {
+func (provider *AlertProvider) priority(resolved bool) int {
+ if resolved && provider.ResolvedPriority == 0 {
return defaultPriority
}
+ if !resolved && provider.Priority == 0 {
+ return defaultPriority
+ }
+ if resolved {
+ return provider.ResolvedPriority
+ }
return provider.Priority
}
diff --git a/alerting/provider/pushover/pushover_test.go b/alerting/provider/pushover/pushover_test.go
index 942a82bf..bf934f65 100644
--- a/alerting/provider/pushover/pushover_test.go
+++ b/alerting/provider/pushover/pushover_test.go
@@ -21,6 +21,7 @@ func TestPushoverAlertProvider_IsValid(t *testing.T) {
UserKey: "aTokenWithLengthOf30characters",
Title: "Gatus Notification",
Priority: 1,
+ ResolvedPriority: 1,
}
if !validProvider.IsValid() {
t.Error("provider should've been valid")
@@ -119,11 +120,12 @@ func TestAlertProvider_buildRequestBody(t *testing.T) {
firstDescription := "description-1"
secondDescription := "description-2"
scenarios := []struct {
- Name string
- Provider AlertProvider
- Alert alert.Alert
- Resolved bool
- ExpectedBody string
+ Name string
+ Provider AlertProvider
+ Alert alert.Alert
+ Resolved bool
+ ResolvedPriority bool
+ ExpectedBody string
}{
{
Name: "triggered",
@@ -134,14 +136,21 @@ func TestAlertProvider_buildRequestBody(t *testing.T) {
},
{
Name: "resolved",
- Provider: AlertProvider{ApplicationToken: "TokenWithLengthOf30Characters2", UserKey: "TokenWithLengthOf30Characters5", Title: "Gatus Notifications", Priority: 2},
+ Provider: AlertProvider{ApplicationToken: "TokenWithLengthOf30Characters2", UserKey: "TokenWithLengthOf30Characters5", Title: "Gatus Notifications", Priority: 2, ResolvedPriority: 2},
Alert: alert.Alert{Description: &secondDescription, SuccessThreshold: 5, FailureThreshold: 3},
Resolved: true,
ExpectedBody: "{\"token\":\"TokenWithLengthOf30Characters2\",\"user\":\"TokenWithLengthOf30Characters5\",\"title\":\"Gatus Notifications\",\"message\":\"RESOLVED: endpoint-name - description-2\",\"priority\":2}",
},
+ {
+ Name: "resolved-priority",
+ Provider: AlertProvider{ApplicationToken: "TokenWithLengthOf30Characters2", UserKey: "TokenWithLengthOf30Characters5", Title: "Gatus Notifications", Priority: 2, ResolvedPriority: 0},
+ Alert: alert.Alert{Description: &secondDescription, SuccessThreshold: 5, FailureThreshold: 3},
+ Resolved: true,
+ ExpectedBody: "{\"token\":\"TokenWithLengthOf30Characters2\",\"user\":\"TokenWithLengthOf30Characters5\",\"title\":\"Gatus Notifications\",\"message\":\"RESOLVED: endpoint-name - description-2\",\"priority\":0}",
+ },
{
Name: "with-sound",
- Provider: AlertProvider{ApplicationToken: "TokenWithLengthOf30Characters2", UserKey: "TokenWithLengthOf30Characters5", Title: "Gatus Notifications", Priority: 2, Sound: "falling"},
+ Provider: AlertProvider{ApplicationToken: "TokenWithLengthOf30Characters2", UserKey: "TokenWithLengthOf30Characters5", Title: "Gatus Notifications", Priority: 2, ResolvedPriority: 2, Sound: "falling"},
Alert: alert.Alert{Description: &secondDescription, SuccessThreshold: 5, FailureThreshold: 3},
Resolved: true,
ExpectedBody: "{\"token\":\"TokenWithLengthOf30Characters2\",\"user\":\"TokenWithLengthOf30Characters5\",\"title\":\"Gatus Notifications\",\"message\":\"RESOLVED: endpoint-name - description-2\",\"priority\":2,\"sound\":\"falling\"}",