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\"}",