Skip to content

Commit f5efab1

Browse files
Merge pull request #641 from SumoLogic/pdziedzic-supp-window-size
DET-347: support for suppression_window_size in CSE rules.
2 parents e0b81ad + 9863590 commit f5efab1

25 files changed

+304
-39
lines changed

CHANGELOG.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## 2.28.4 (Unreleased)
22

3+
FEATURES:
4+
* Added support for signal suppression window size in CSE Rules. (GH-641)
5+
36
ENHANCEMENTS:
47
* Added support for custom window sizes for the CSE Rules (Aggregation, Chain, Threshold). (GH-623)
58

@@ -30,13 +33,13 @@ BUG FIXES:
3033
FEATURES:
3134
* resource/sumologic_monitor: Added support for setting `time_zone` at Monitor level for notifications content (GH-586)
3235

33-
BUG FIXES:
36+
BUG FIXES:
3437
* Fixes `resource_sumologic_cse_match_list` constant change when defining a match list containing a custom column using the custom columns name instead of ID (GH-591)
3538

3639
## 2.27.0 (September 28, 2023)
3740
FEATURES:
3841
* **New Resource:** sumologic_cse_tag_schema (GH-575)
39-
* **New Resource:** sumologic_cse_context_action (GH-573)
42+
* **New Resource:** sumologic_cse_context_action (GH-573)
4043

4144
ENHANCEMENTS:
4245
* resource/sumologic_cse_inventory_entity_group_configuration: Add new fields to support enhanced functionality. (GH-495)

sumologic/resource_sumologic_cse_aggregation_rule.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ func resourceSumologicCSEAggregationRule() *schema.Resource {
105105
Type: schema.TypeString,
106106
Optional: true,
107107
},
108+
"suppression_window_size": {
109+
Type: schema.TypeInt,
110+
Optional: true,
111+
ValidateFunc: validation.IntBetween(0, 7*24*60*60*1000),
112+
ForceNew: false,
113+
},
108114
},
109115
}
110116
}
@@ -145,6 +151,9 @@ func resourceSumologicCSEAggregationRuleRead(d *schema.ResourceData, meta interf
145151
if strings.EqualFold(CSEAggregationRuleGet.WindowSizeName, "CUSTOM") {
146152
d.Set("window_size_millis", CSEAggregationRuleGet.WindowSize)
147153
}
154+
if CSEAggregationRuleGet.SuppressionWindowSize != nil {
155+
d.Set("suppression_window_size", CSEAggregationRuleGet.SuppressionWindowSize)
156+
}
148157
return nil
149158
}
150159

@@ -159,6 +168,13 @@ func resourceSumologicCSEAggregationRuleCreate(d *schema.ResourceData, meta inte
159168
c := meta.(*Client)
160169

161170
if d.Id() == "" {
171+
172+
var suppressionWindowSize *int = nil
173+
if suppression, ok := d.GetOk("suppression_window_size"); ok {
174+
suppressionInt := suppression.(int)
175+
suppressionWindowSize = &suppressionInt
176+
}
177+
162178
id, err := c.CreateCSEAggregationRule(CSEAggregationRule{
163179
AggregationFunctions: resourceToAggregationFunctionsArray(d.Get("aggregation_functions").([]interface{})),
164180
DescriptionExpression: d.Get("description_expression").(string),
@@ -177,6 +193,7 @@ func resourceSumologicCSEAggregationRuleCreate(d *schema.ResourceData, meta inte
177193
TriggerExpression: d.Get("trigger_expression").(string),
178194
WindowSize: windowSizeField(d.Get("window_size").(string)),
179195
WindowSizeMilliseconds: d.Get("window_size_millis").(string),
196+
SuppressionWindowSize: suppressionWindowSize,
180197
})
181198

182199
if err != nil {
@@ -237,6 +254,12 @@ func resourceToCSEAggregationRule(d *schema.ResourceData) (CSEAggregationRule, e
237254
return CSEAggregationRule{}, nil
238255
}
239256

257+
var suppressionWindowSize *int = nil
258+
if suppression, ok := d.GetOk("suppression_window_size"); ok {
259+
suppressionInt := suppression.(int)
260+
suppressionWindowSize = &suppressionInt
261+
}
262+
240263
return CSEAggregationRule{
241264
ID: id,
242265
AggregationFunctions: resourceToAggregationFunctionsArray(d.Get("aggregation_functions").([]interface{})),
@@ -256,5 +279,6 @@ func resourceToCSEAggregationRule(d *schema.ResourceData) (CSEAggregationRule, e
256279
TriggerExpression: d.Get("trigger_expression").(string),
257280
WindowSize: windowSizeField(d.Get("window_size").(string)),
258281
WindowSizeMilliseconds: d.Get("window_size_millis").(string),
282+
SuppressionWindowSize: suppressionWindowSize,
259283
}, nil
260284
}

sumologic/resource_sumologic_cse_aggregation_rule_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ func TestAccSumologicCSEAggregationRule_createAndUpdateWithCustomWindowSize(t *t
2222

2323
updatedPayload := payload
2424
updatedPayload.WindowSizeMilliseconds = "14400000" // 4h
25+
updatedSuppressionWindow := 5 * 60 * 60 * 1000
26+
updatedPayload.SuppressionWindowSize = &updatedSuppressionWindow
2527

2628
var aggregationRule CSEAggregationRule
2729
resourceName := "sumologic_cse_aggregation_rule.aggregation_rule"
@@ -60,10 +62,14 @@ func TestAccSumologicCSEAggregationRule_createAndUpdateToCustomWindowSize(t *tes
6062
payload := getCSEAggregationRuleTestPayload()
6163
payload.WindowSize = "T30M"
6264
payload.WindowSizeMilliseconds = "irrelevant"
65+
suppressionWindow := 35 * 60 * 1000
66+
payload.SuppressionWindowSize = &suppressionWindow
6367

6468
updatedPayload := payload
6569
updatedPayload.WindowSize = "CUSTOM"
6670
updatedPayload.WindowSizeMilliseconds = "14400000" // 4h
71+
updatedSuppressionWindow := 5 * 60 * 60 * 1000
72+
updatedPayload.SuppressionWindowSize = &updatedSuppressionWindow
6773

6874
var aggregationRule CSEAggregationRule
6975
resourceName := "sumologic_cse_aggregation_rule.aggregation_rule"
@@ -102,10 +108,14 @@ func TestAccSumologicCSEAggregationRule_createAndUpdate(t *testing.T) {
102108
payload := getCSEAggregationRuleTestPayload()
103109
payload.WindowSize = "T30M"
104110
payload.WindowSizeMilliseconds = "irrelevant"
111+
suppressionWindow := 35 * 60 * 1000
112+
payload.SuppressionWindowSize = &suppressionWindow
105113

106114
updatedPayload := payload
107115
updatedPayload.Name = fmt.Sprintf("Updated Aggregation Rule %s", uuid.New())
108116
updatedPayload.WindowSize = "T12H"
117+
updatedSuppressionWindow := 13 * 60 * 60 * 1000
118+
updatedPayload.SuppressionWindowSize = &updatedSuppressionWindow
109119

110120
var aggregationRule CSEAggregationRule
111121
resourceName := "sumologic_cse_aggregation_rule.aggregation_rule"
@@ -196,6 +206,9 @@ func testCreateCSEAggregationRuleConfig(t *testing.T, payload *CSEAggregationRul
196206
{{ if eq .WindowSize "CUSTOM" }}
197207
window_size_millis = "{{ .WindowSizeMilliseconds }}"
198208
{{ end }}
209+
{{ if .SuppressionWindowSize }}
210+
suppression_window_size = {{ .SuppressionWindowSize }}
211+
{{ end }}
199212
}
200213
`
201214

@@ -239,6 +252,7 @@ func getCSEAggregationRuleTestPayload() CSEAggregationRule {
239252
Tags: []string{"foo"},
240253
WindowSize: windowSizeField("CUSTOM"),
241254
WindowSizeMilliseconds: "10800000",
255+
SuppressionWindowSize: nil,
242256
}
243257
}
244258

@@ -285,6 +299,7 @@ func testCheckCSEAggregationRuleValues(t *testing.T, expected *CSEAggregationRul
285299
if strings.EqualFold(actual.WindowSizeName, "CUSTOM") {
286300
assert.Equal(t, expected.WindowSizeMilliseconds, string(actual.WindowSize))
287301
}
302+
assert.Equal(t, expected.SuppressionWindowSize, actual.SuppressionWindowSize)
288303
return nil
289304
}
290305
}

sumologic/resource_sumologic_cse_chain_rule.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ func resourceSumologicCSEChainRule() *schema.Resource {
8989
Type: schema.TypeString,
9090
Optional: true,
9191
},
92+
"suppression_window_size": {
93+
Type: schema.TypeInt,
94+
Optional: true,
95+
ValidateFunc: validation.IntBetween(0, 7*24*60*60*1000),
96+
ForceNew: false,
97+
},
9298
},
9399
}
94100
}
@@ -125,6 +131,9 @@ func resourceSumologicCSEChainRuleRead(d *schema.ResourceData, meta interface{})
125131
if strings.EqualFold(CSEChainRuleGet.WindowSizeName, "CUSTOM") {
126132
d.Set("window_size_millis", CSEChainRuleGet.WindowSize)
127133
}
134+
if CSEChainRuleGet.SuppressionWindowSize != nil {
135+
d.Set("suppression_window_size", CSEChainRuleGet.SuppressionWindowSize)
136+
}
128137

129138
return nil
130139
}
@@ -140,6 +149,13 @@ func resourceSumologicCSEChainRuleCreate(d *schema.ResourceData, meta interface{
140149
c := meta.(*Client)
141150

142151
if d.Id() == "" {
152+
153+
var suppressionWindowSize *int = nil
154+
if suppression, ok := d.GetOk("suppression_window_size"); ok {
155+
suppressionInt := suppression.(int)
156+
suppressionWindowSize = &suppressionInt
157+
}
158+
143159
id, err := c.CreateCSEChainRule(CSEChainRule{
144160
Description: d.Get("description").(string),
145161
Enabled: d.Get("enabled").(bool),
@@ -155,6 +171,7 @@ func resourceSumologicCSEChainRuleCreate(d *schema.ResourceData, meta interface{
155171
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
156172
WindowSize: windowSizeField(d.Get("window_size").(string)),
157173
WindowSizeMilliseconds: d.Get("window_size_millis").(string),
174+
SuppressionWindowSize: suppressionWindowSize,
158175
})
159176

160177
if err != nil {
@@ -212,6 +229,12 @@ func resourceToCSEChainRule(d *schema.ResourceData) (CSEChainRule, error) {
212229
return CSEChainRule{}, nil
213230
}
214231

232+
var suppressionWindowSize *int = nil
233+
if suppression, ok := d.GetOk("suppression_window_size"); ok {
234+
suppressionInt := suppression.(int)
235+
suppressionWindowSize = &suppressionInt
236+
}
237+
215238
return CSEChainRule{
216239
ID: id,
217240
Description: d.Get("description").(string),
@@ -228,5 +251,6 @@ func resourceToCSEChainRule(d *schema.ResourceData) (CSEChainRule, error) {
228251
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
229252
WindowSize: windowSizeField(d.Get("window_size").(string)),
230253
WindowSizeMilliseconds: d.Get("window_size_millis").(string),
254+
SuppressionWindowSize: suppressionWindowSize,
231255
}, nil
232256
}

sumologic/resource_sumologic_cse_chain_rule_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ func TestAccSumologicCSEChainRule_createAndUpdateWithCustomWindowSize(t *testing
2222

2323
updatedPayload := payload
2424
updatedPayload.WindowSizeMilliseconds = "14400000" // 4h
25+
updatedSuppressionWindow := 15000000
26+
updatedPayload.SuppressionWindowSize = &updatedSuppressionWindow
2527

2628
var chainRule CSEChainRule
2729
resourceName := "sumologic_cse_chain_rule.chain_rule"
@@ -60,10 +62,14 @@ func TestAccSumologicCSEChainRule_createAndUpdateToCustomWindowSize(t *testing.T
6062
payload := getCSEChainRuleTestPayload()
6163
payload.WindowSize = "T30M"
6264
payload.WindowSizeMilliseconds = "irrelevant"
65+
suppressionWindow := 2000000
66+
payload.SuppressionWindowSize = &suppressionWindow
6367

6468
updatedPayload := payload
6569
updatedPayload.WindowSize = "CUSTOM"
6670
updatedPayload.WindowSizeMilliseconds = "14400000" // 4h
71+
updatedSuppressionWindow := 20000000
72+
updatedPayload.SuppressionWindowSize = &updatedSuppressionWindow
6773

6874
var chainRule CSEChainRule
6975
resourceName := "sumologic_cse_chain_rule.chain_rule"
@@ -102,10 +108,14 @@ func TestAccSumologicCSEChainRule_createAndUpdate(t *testing.T) {
102108
payload := getCSEChainRuleTestPayload()
103109
payload.WindowSize = "T30M"
104110
payload.WindowSizeMilliseconds = "irrelevant"
111+
suppressionWindow := 35 * 60 * 1000
112+
payload.SuppressionWindowSize = &suppressionWindow
105113

106114
updatedPayload := payload
107115
updatedPayload.Name = fmt.Sprintf("Updated Chain Rule %s", uuid.New())
108116
updatedPayload.WindowSize = "T12H"
117+
updatedSuppressionWindow := 13 * 60 * 60 * 1000
118+
updatedPayload.SuppressionWindowSize = &updatedSuppressionWindow
109119

110120
var chainRule CSEChainRule
111121
resourceName := "sumologic_cse_chain_rule.chain_rule"
@@ -189,6 +199,9 @@ func testCreateCSEChainRuleConfig(t *testing.T, payload *CSEChainRule) string {
189199
{{ if eq .WindowSize "CUSTOM" }}
190200
window_size_millis = "{{ .WindowSizeMilliseconds }}"
191201
{{ end }}
202+
{{ if .SuppressionWindowSize }}
203+
suppression_window_size = {{ .SuppressionWindowSize }}
204+
{{ end }}
192205
}
193206
`
194207

@@ -221,6 +234,7 @@ func getCSEChainRuleTestPayload() CSEChainRule {
221234
Tags: []string{"foo"},
222235
WindowSize: windowSizeField("CUSTOM"),
223236
WindowSizeMilliseconds: "10800000",
237+
SuppressionWindowSize: nil,
224238
}
225239
}
226240

@@ -264,6 +278,7 @@ func testCheckCSEChainRuleValues(t *testing.T, expected *CSEChainRule, actual *C
264278
if strings.EqualFold(actual.WindowSizeName, "CUSTOM") {
265279
assert.Equal(t, expected.WindowSizeMilliseconds, string(actual.WindowSize))
266280
}
281+
assert.Equal(t, expected.SuppressionWindowSize, actual.SuppressionWindowSize)
267282
return nil
268283
}
269284
}

sumologic/resource_sumologic_cse_first_seen_rule.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package sumologic
22

33
import (
4+
"log"
5+
46
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
57
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
6-
"log"
78
)
89

910
func resourceSumologicCSEFirstSeenRule() *schema.Resource {
@@ -86,6 +87,12 @@ func resourceSumologicCSEFirstSeenRule() *schema.Resource {
8687
ValidateFunc: validation.StringIsNotEmpty,
8788
},
8889
},
90+
"suppression_window_size": {
91+
Type: schema.TypeInt,
92+
Optional: true,
93+
ValidateFunc: validation.IntBetween(0, 7*24*60*60*1000),
94+
ForceNew: false,
95+
},
8996
},
9097
}
9198
}
@@ -122,6 +129,9 @@ func resourceSumologicCSEFirstSeenRuleRead(d *schema.ResourceData, meta interfac
122129
d.Set("summary_expression", CSEFirstSeenRuleGet.SummaryExpression)
123130
d.Set("tags", CSEFirstSeenRuleGet.Tags)
124131
d.Set("value_fields", CSEFirstSeenRuleGet.ValueFields)
132+
if CSEFirstSeenRuleGet.SuppressionWindowSize != nil {
133+
d.Set("suppression_window_size", CSEFirstSeenRuleGet.SuppressionWindowSize)
134+
}
125135

126136
return nil
127137
}
@@ -137,6 +147,12 @@ func resourceSumologicCSEFirstSeenRuleCreate(d *schema.ResourceData, meta interf
137147
c := meta.(*Client)
138148

139149
if d.Id() == "" {
150+
var suppressionWindowSize *int = nil
151+
if suppression, ok := d.GetOk("suppression_window_size"); ok {
152+
suppressionInt := suppression.(int)
153+
suppressionWindowSize = &suppressionInt
154+
}
155+
140156
id, err := c.CreateCSEFirstSeenRule(CSEFirstSeenRule{
141157
BaselineType: d.Get("baseline_type").(string),
142158
BaselineWindowSize: d.Get("baseline_window_size").(string),
@@ -154,6 +170,7 @@ func resourceSumologicCSEFirstSeenRuleCreate(d *schema.ResourceData, meta interf
154170
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
155171
ValueFields: resourceToStringArray(d.Get("value_fields").([]interface{})),
156172
Version: 1,
173+
SuppressionWindowSize: suppressionWindowSize,
157174
})
158175

159176
if err != nil {
@@ -185,6 +202,12 @@ func resourceToCSEFirstSeenRule(d *schema.ResourceData) (CSEFirstSeenRule, error
185202
return CSEFirstSeenRule{}, nil
186203
}
187204

205+
var suppressionWindowSize *int = nil
206+
if suppression, ok := d.GetOk("suppression_window_size"); ok {
207+
suppressionInt := suppression.(int)
208+
suppressionWindowSize = &suppressionInt
209+
}
210+
188211
return CSEFirstSeenRule{
189212
ID: id,
190213
BaselineType: d.Get("baseline_type").(string),
@@ -203,5 +226,6 @@ func resourceToCSEFirstSeenRule(d *schema.ResourceData) (CSEFirstSeenRule, error
203226
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
204227
ValueFields: resourceToStringArray(d.Get("value_fields").([]interface{})),
205228
Version: 1,
229+
SuppressionWindowSize: suppressionWindowSize,
206230
}, nil
207231
}

0 commit comments

Comments
 (0)