From 22d636ba0b6207c5c2f6cb6c1ae2b18f26f4a39b Mon Sep 17 00:00:00 2001 From: Diego Bonfigli Date: Thu, 27 Jul 2023 19:34:53 +0200 Subject: [PATCH] feat(alerts): add keep_firing_for_minutes field --- sysdig/internal/client/v2/model.go | 3 ++- ...ource_sysdig_monitor_alert_v2_prometheus.go | 18 +++++++++++++++++- ..._sysdig_monitor_alert_v2_prometheus_test.go | 17 +++++++++++++++++ website/docs/r/monitor_alert_v2_prometheus.md | 1 + 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/sysdig/internal/client/v2/model.go b/sysdig/internal/client/v2/model.go index 99760a12..c3602081 100644 --- a/sysdig/internal/client/v2/model.go +++ b/sysdig/internal/client/v2/model.go @@ -501,7 +501,8 @@ type AlertV2Common struct { } type AlertV2ConfigPrometheus struct { - Query string `json:"query"` + Query string `json:"query"` + KeepFiringForSec *int `json:"keepFiringForSec,omitempty"` } type AlertV2Prometheus struct { diff --git a/sysdig/resource_sysdig_monitor_alert_v2_prometheus.go b/sysdig/resource_sysdig_monitor_alert_v2_prometheus.go index b34e473c..89174b10 100644 --- a/sysdig/resource_sysdig_monitor_alert_v2_prometheus.go +++ b/sysdig/resource_sysdig_monitor_alert_v2_prometheus.go @@ -2,12 +2,14 @@ package sysdig import ( "context" - v2 "github.com/draios/terraform-provider-sysdig/sysdig/internal/client/v2" "strconv" "time" + v2 "github.com/draios/terraform-provider-sysdig/sysdig/internal/client/v2" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) func resourceSysdigMonitorAlertV2Prometheus() *schema.Resource { @@ -34,6 +36,11 @@ func resourceSysdigMonitorAlertV2Prometheus() *schema.Resource { Type: schema.TypeString, Required: true, }, + "keep_firing_for_minutes": { + Type: schema.TypeInt, + Optional: true, + ValidateFunc: validation.IntAtLeast(1), + }, }), } } @@ -139,6 +146,10 @@ func buildAlertV2PrometheusStruct(d *schema.ResourceData) *v2.AlertV2Prometheus config := v2.AlertV2ConfigPrometheus{} config.Query = d.Get("query").(string) + if keepFiringForMinutes, ok := d.GetOk("keep_firing_for_minutes"); ok { + kff := keepFiringForMinutes.(int) * 60 + config.KeepFiringForSec = &kff + } alert := &v2.AlertV2Prometheus{ AlertV2Common: *alertV2Common, @@ -154,6 +165,11 @@ func updateAlertV2PrometheusState(d *schema.ResourceData, alert *v2.AlertV2Prome } _ = d.Set("query", alert.Config.Query) + if alert.Config.KeepFiringForSec != nil { + _ = d.Set("keep_firing_for_minutes", *alert.Config.KeepFiringForSec/60) + } else { + _ = d.Set("keep_firing_for_minutes", nil) + } return } diff --git a/sysdig/resource_sysdig_monitor_alert_v2_prometheus_test.go b/sysdig/resource_sysdig_monitor_alert_v2_prometheus_test.go index b4be8066..c14215d2 100644 --- a/sysdig/resource_sysdig_monitor_alert_v2_prometheus_test.go +++ b/sysdig/resource_sysdig_monitor_alert_v2_prometheus_test.go @@ -35,6 +35,9 @@ func TestAccAlertV2Prometheus(t *testing.T) { { Config: alertV2PrometheusWithGroup(rText()), }, + { + Config: alertV2PrometheusWithKeepFiringFor(rText()), + }, { ResourceName: "sysdig_monitor_alert_v2_prometheus.sample", ImportState: true, @@ -70,3 +73,17 @@ resource "sysdig_monitor_alert_v2_prometheus" "sample" { } `, name, name) } + +func alertV2PrometheusWithKeepFiringFor(name string) string { + return fmt.Sprintf(` +resource "sysdig_monitor_alert_v2_prometheus" "sample" { + name = "TERRAFORM TEST - PROMQL %s" + description = "TERRAFORM TEST - PROMQL %s" + severity = "high" + query = "(elasticsearch_jvm_memory_used_bytes{area=\"heap\"} / elasticsearch_jvm_memory_max_bytes{area=\"heap\"}) * 100 > 80" + trigger_after_minutes = 10 + enabled = false + keep_firing_for_minutes = 10 +} +`, name, name) +} diff --git a/website/docs/r/monitor_alert_v2_prometheus.md b/website/docs/r/monitor_alert_v2_prometheus.md index c72e059f..83edcafe 100644 --- a/website/docs/r/monitor_alert_v2_prometheus.md +++ b/website/docs/r/monitor_alert_v2_prometheus.md @@ -73,6 +73,7 @@ By defining this field, the user can add link to notificatons. ### Prometheus alert arguments * `query` - (Required) PromQL-based metric expression to alert on. Example: `histogram_quantile(0.99, rate(etcd_http_successful_duration_seconds_bucket[5m]) > 0.15` or `predict_linear(sysdig_fs_free_bytes{fstype!~"tmpfs"}[1h], 24*3600) < 10000000000`. +* `keep_firing_for_minutes` - (Optional) Alert resolution delay before actually resolving an alert. ## Attributes Reference