Skip to content

Commit a28f63b

Browse files
author
Ashish Gaurav
committed
[Monitors] schema and struct changes for slo monitors
Took 14 minutes
1 parent fe9e3a8 commit a28f63b

File tree

2 files changed

+76
-30
lines changed

2 files changed

+76
-30
lines changed

sumologic/resource_sumologic_monitors_library_monitor.go

Lines changed: 62 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,12 @@ func resourceSumologicMonitorsLibraryMonitor() *schema.Resource {
120120
ValidateFunc: validation.StringInSlice([]string{"AtLeastOnce", "Always", "ResultCount", "MissingData"}, false),
121121
},
122122
"detection_method": {
123-
Type: schema.TypeString,
124-
Optional: true,
125-
ValidateFunc: validation.StringInSlice([]string{"StaticCondition", "LogsStaticCondition", "MetricsStaticCondition", "LogsOutlierCondition", "MetricsOutlierCondition", "LogsMissingDataCondition", "MetricsMissingDataCondition"}, false),
123+
Type: schema.TypeString,
124+
Optional: true,
125+
ValidateFunc: validation.StringInSlice([]string{"StaticCondition", "LogsStaticCondition",
126+
"MetricsStaticCondition", "LogsOutlierCondition", "MetricsOutlierCondition",
127+
"LogsMissingDataCondition", "MetricsMissingDataCondition", "SloSliCondition",
128+
"SloBurnRateCondition"}, false),
126129
},
127130
},
128131
},
@@ -182,6 +185,22 @@ func resourceSumologicMonitorsLibraryMonitor() *schema.Resource {
182185
Schema: metricsMissingDataTriggerConditionSchema,
183186
},
184187
},
188+
sloSLIConditionFieldName: {
189+
Type: schema.TypeList,
190+
MaxItems: 1,
191+
Optional: true,
192+
Elem: &schema.Resource{
193+
Schema: sloSLITriggerConditionSchema,
194+
},
195+
},
196+
sloBurnRateConditionFieldName: {
197+
Type: schema.TypeList,
198+
MaxItems: 1,
199+
Optional: true,
200+
Elem: &schema.Resource{
201+
Schema: sloBurnRateTriggerConditionSchema,
202+
},
203+
},
185204
},
186205
},
187206
},
@@ -266,7 +285,7 @@ func resourceSumologicMonitorsLibraryMonitor() *schema.Resource {
266285
"monitor_type": {
267286
Type: schema.TypeString,
268287
Required: true,
269-
ValidateFunc: validation.StringInSlice([]string{"Logs", "Metrics"}, false),
288+
ValidateFunc: validation.StringInSlice([]string{"Logs", "Metrics", "Slo"}, false),
270289
},
271290

272291
"evaluation_delay": {
@@ -325,7 +344,10 @@ func resourceSumologicMonitorsLibraryMonitor() *schema.Resource {
325344
Type: schema.TypeString,
326345
Optional: true,
327346
},
328-
347+
"slo_id": {
348+
Type: schema.TypeString,
349+
Optional: true,
350+
},
329351
"alert_name": {
330352
Type: schema.TypeString,
331353
Optional: true,
@@ -445,6 +467,23 @@ var metricsMissingDataTriggerConditionSchema = map[string]*schema.Schema{
445467
},
446468
}
447469

470+
var sloSLITriggerConditionSchema = map[string]*schema.Schema{
471+
"sli_threshold": {
472+
Type: schema.TypeFloat,
473+
Required: true,
474+
ValidateFunc: validation.FloatBetween(0, 100),
475+
},
476+
}
477+
478+
var sloBurnRateTriggerConditionSchema = map[string]*schema.Schema{
479+
"time_range": &timeRangeSchema,
480+
"burn_rate_threshold": {
481+
Type: schema.TypeFloat,
482+
Required: true,
483+
ValidateFunc: validation.FloatAtLeast(0),
484+
},
485+
}
486+
448487
var occurrenceTypeSchema = schema.Schema{
449488
Type: schema.TypeString,
450489
Required: true,
@@ -765,6 +804,7 @@ func triggerConditionsBlockToJson(block map[string]interface{}) []TriggerConditi
765804
if sc, ok := fromSingletonArray(block, metricsMissingDataConditionFieldName); ok {
766805
conditions = append(conditions, metricsMissingDataConditionBlockToJson(sc)...)
767806
}
807+
768808
return conditions
769809
}
770810

@@ -1087,19 +1127,23 @@ func jsonToMetricsMissingDataConditionBlock(conditions []TriggerCondition) map[s
10871127
return block
10881128
}
10891129

1090-
var logsStaticConditionFieldName = "logs_static_condition"
1091-
var metricsStaticConditionFieldName = "metrics_static_condition"
1092-
var logsOutlierConditionFieldName = "logs_outlier_condition"
1093-
var metricsOutlierConditionFieldName = "metrics_outlier_condition"
1094-
var logsMissingDataConditionFieldName = "logs_missing_data_condition"
1095-
var metricsMissingDataConditionFieldName = "metrics_missing_data_condition"
1096-
1097-
var logsStaticConditionDetectionMethod = "LogsStaticCondition"
1098-
var metricsStaticConditionDetectionMethod = "MetricsStaticCondition"
1099-
var logsOutlierConditionDetectionMethod = "LogsOutlierCondition"
1100-
var metricsOutlierConditionDetectionMethod = "MetricsOutlierCondition"
1101-
var logsMissingDataConditionDetectionMethod = "LogsMissingDataCondition"
1102-
var metricsMissingDataConditionDetectionMethod = "MetricsMissingDataCondition"
1130+
const logsStaticConditionFieldName = "logs_static_condition"
1131+
const metricsStaticConditionFieldName = "metrics_static_condition"
1132+
const logsOutlierConditionFieldName = "logs_outlier_condition"
1133+
const metricsOutlierConditionFieldName = "metrics_outlier_condition"
1134+
const logsMissingDataConditionFieldName = "logs_missing_data_condition"
1135+
const metricsMissingDataConditionFieldName = "metrics_missing_data_condition"
1136+
const sloSLIConditionFieldName = "slo_sli_condition"
1137+
const sloBurnRateConditionFieldName = "slo_burn_rate_condition"
1138+
1139+
const logsStaticConditionDetectionMethod = "LogsStaticCondition"
1140+
const metricsStaticConditionDetectionMethod = "MetricsStaticCondition"
1141+
const logsOutlierConditionDetectionMethod = "LogsOutlierCondition"
1142+
const metricsOutlierConditionDetectionMethod = "MetricsOutlierCondition"
1143+
const logsMissingDataConditionDetectionMethod = "LogsMissingDataCondition"
1144+
const metricsMissingDataConditionDetectionMethod = "MetricsMissingDataCondition"
1145+
const sloSLIConditionDetectionMethod = "SloSliCondition"
1146+
const sloBurnRateConditionDetectionMethod = "SloBurnRateCondition"
11031147

11041148
func getQueries(d *schema.ResourceData) []MonitorQuery {
11051149
rawQueries := d.Get("queries").([]interface{})

sumologic/sumologic_monitors_library_monitor.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,18 +147,20 @@ type MonitorQuery struct {
147147
}
148148

149149
type TriggerCondition struct {
150-
TimeRange string `json:"timeRange"`
151-
TriggerType string `json:"triggerType"`
152-
Threshold float64 `json:"threshold,omitempty"`
153-
ThresholdType string `json:"thresholdType,omitempty"`
154-
OccurrenceType string `json:"occurrenceType"`
155-
TriggerSource string `json:"triggerSource"`
156-
DetectionMethod string `json:"detectionMethod"`
157-
Field string `json:"field,omitempty"`
158-
Window int `json:"window,omitempty"`
159-
BaselineWindow string `json:"baselineWindow,omitempty"`
160-
Consecutive int `json:"consecutive,omitempty"`
161-
Direction string `json:"direction,omitempty"`
150+
TimeRange string `json:"timeRange"`
151+
TriggerType string `json:"triggerType"`
152+
Threshold float64 `json:"threshold,omitempty"`
153+
ThresholdType string `json:"thresholdType,omitempty"`
154+
OccurrenceType string `json:"occurrenceType"`
155+
TriggerSource string `json:"triggerSource"`
156+
DetectionMethod string `json:"detectionMethod"`
157+
Field string `json:"field,omitempty"`
158+
Window int `json:"window,omitempty"`
159+
BaselineWindow string `json:"baselineWindow,omitempty"`
160+
Consecutive int `json:"consecutive,omitempty"`
161+
Direction string `json:"direction,omitempty"`
162+
SLIThreshold float64 `json:"sliThreshold,omitempty"`
163+
BurnRateThreshold float64 `json:"burnRateThreshold,omitempty"`
162164
}
163165

164166
type MonitorNotification struct {

0 commit comments

Comments
 (0)