Skip to content

Commit f82d84d

Browse files
DET-383: Added support for dynamic severity for custom insights.
1 parent baabd1d commit f82d84d

File tree

3 files changed

+105
-36
lines changed

3 files changed

+105
-36
lines changed

sumologic/resource_sumologic_cse_custom_insight.go

Lines changed: 63 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,23 @@ func resourceSumologicCSECustomInsight() *schema.Resource {
4545
Required: true,
4646
ValidateFunc: validation.StringInSlice([]string{"HIGH", "MEDIUM", "LOW", "CRITICAL"}, false),
4747
},
48+
"dynamic_severity": {
49+
Type: schema.TypeList,
50+
Optional: true,
51+
Elem: &schema.Resource{
52+
Schema: map[string]*schema.Schema{
53+
"minimum_signal_severity": {
54+
Type: schema.TypeInt,
55+
Required: true,
56+
},
57+
"insight_severity": {
58+
Type: schema.TypeString,
59+
Required: true,
60+
ValidateFunc: validation.StringInSlice([]string{"HIGH", "MEDIUM", "LOW", "CRITICAL"}, false),
61+
},
62+
},
63+
},
64+
},
4865
"signal_names": {
4966
Type: schema.TypeList,
5067
Optional: true,
@@ -86,6 +103,7 @@ func resourceSumologicCSECustomInsightRead(d *schema.ResourceData, meta interfac
86103
d.Set("ordered", CSECustomInsightGet.Ordered)
87104
d.Set("rule_ids", CSECustomInsightGet.RuleIds)
88105
d.Set("severity", CSECustomInsightGet.Severity)
106+
d.Set("dynamic_severity", dynamicSeverityArrayToResource(CSECustomInsightGet.DynamicSeverity))
89107
d.Set("signal_names", CSECustomInsightGet.SignalNames)
90108
d.Set("tags", CSECustomInsightGet.Tags)
91109

@@ -103,14 +121,15 @@ func resourceSumologicCSECustomInsightCreate(d *schema.ResourceData, meta interf
103121

104122
if d.Id() == "" {
105123
id, err := c.CreateCSECustomInsight(CSECustomInsight{
106-
Description: d.Get("description").(string),
107-
Enabled: d.Get("enabled").(bool),
108-
RuleIds: resourceToStringArray(d.Get("rule_ids").([]interface{})),
109-
Name: d.Get("name").(string),
110-
Ordered: d.Get("ordered").(bool),
111-
Severity: d.Get("severity").(string),
112-
SignalNames: resourceToStringArray(d.Get("signal_names").([]interface{})),
113-
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
124+
Description: d.Get("description").(string),
125+
Enabled: d.Get("enabled").(bool),
126+
RuleIds: resourceToStringArray(d.Get("rule_ids").([]interface{})),
127+
Name: d.Get("name").(string),
128+
Ordered: d.Get("ordered").(bool),
129+
Severity: d.Get("severity").(string),
130+
DynamicSeverity: resourceToDynamicSeverityArray(d.Get("dynamic_severity").([]interface{})),
131+
SignalNames: resourceToStringArray(d.Get("signal_names").([]interface{})),
132+
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
114133
})
115134

116135
if err != nil {
@@ -143,14 +162,41 @@ func resourceToCSECustomInsight(d *schema.ResourceData) (CSECustomInsight, error
143162
}
144163

145164
return CSECustomInsight{
146-
ID: id,
147-
Description: d.Get("description").(string),
148-
Enabled: d.Get("enabled").(bool),
149-
RuleIds: resourceToStringArray(d.Get("rule_ids").([]interface{})),
150-
Name: d.Get("name").(string),
151-
Ordered: d.Get("ordered").(bool),
152-
Severity: d.Get("severity").(string),
153-
SignalNames: resourceToStringArray(d.Get("signal_names").([]interface{})),
154-
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
165+
ID: id,
166+
Description: d.Get("description").(string),
167+
Enabled: d.Get("enabled").(bool),
168+
RuleIds: resourceToStringArray(d.Get("rule_ids").([]interface{})),
169+
Name: d.Get("name").(string),
170+
Ordered: d.Get("ordered").(bool),
171+
Severity: d.Get("severity").(string),
172+
DynamicSeverity: resourceToDynamicSeverityArray(d.Get("dynamic_severity").([]interface{})),
173+
SignalNames: resourceToStringArray(d.Get("signal_names").([]interface{})),
174+
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
155175
}, nil
156176
}
177+
178+
func resourceToDynamicSeverityArray(resourceDynamicSeverity []interface{}) []DynamicSeverity {
179+
result := make([]DynamicSeverity, len(resourceDynamicSeverity))
180+
181+
for i, resourceDynamicSeverity := range resourceDynamicSeverity {
182+
result[i] = DynamicSeverity{
183+
MinimumSignalSeverity: resourceDynamicSeverity.(map[string]interface{})["minimum_signal_severity"].(int),
184+
InsightSeverity: resourceDynamicSeverity.(map[string]interface{})["insight_severity"].(string),
185+
}
186+
}
187+
188+
return result
189+
}
190+
191+
func dynamicSeverityArrayToResource(dynamicSeverities []DynamicSeverity) []map[string]interface{} {
192+
result := make([]map[string]interface{}, len(dynamicSeverities))
193+
194+
for i, dynamicSeverity := range dynamicSeverities {
195+
result[i] = map[string]interface{}{
196+
"minimum_signal_severity": dynamicSeverity.MinimumSignalSeverity,
197+
"insight_severity": dynamicSeverity.InsightSeverity,
198+
}
199+
}
200+
201+
return result
202+
}

sumologic/resource_sumologic_cse_custom_insight_test.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@ func TestAccSumologicCSECustomInsight_createAndUpdate(t *testing.T) {
1717
ordered := true
1818
name := "Test Custom Insight"
1919
severity := "HIGH"
20+
minimumSignalSeverity := 5
21+
insightSeverity := "CRITICAL"
2022
signalName1 := "Some Signal Name *"
2123
signalName2 := "Some Other Signal Name *"
2224
tag := "foo"
2325

2426
nameUpdated := "Updated Custom Insight"
2527
severityUpdated := "LOW"
28+
minimumSignalSeverityUpdated := 8
2629

2730
resourceName := "sumologic_cse_custom_insight.custom_insight"
2831
resource.Test(t, resource.TestCase{
@@ -32,26 +35,31 @@ func TestAccSumologicCSECustomInsight_createAndUpdate(t *testing.T) {
3235
Steps: []resource.TestStep{
3336
{
3437
Config: testCreateCSECustomInsightConfig(description, enabled,
35-
ordered, name, severity, signalName1, signalName2, tag),
38+
ordered, name, severity, minimumSignalSeverity, insightSeverity, signalName1, signalName2, tag),
3639
Check: resource.ComposeTestCheckFunc(
3740
testCheckCSECustomInsightExists(resourceName, &CustomInsight),
3841
testCheckCustomInsightValues(&CustomInsight, description, enabled,
39-
ordered, name, severity, signalName1, signalName2, tag),
42+
ordered, name, severity, minimumSignalSeverity, insightSeverity, signalName1, signalName2, tag),
4043
resource.TestCheckResourceAttrSet(resourceName, "id"),
4144
),
4245
},
4346
{
4447
Config: testCreateCSECustomInsightConfig(description, enabled,
45-
ordered, nameUpdated, severityUpdated, signalName1,
48+
ordered, nameUpdated, severityUpdated, minimumSignalSeverityUpdated, insightSeverity, signalName1,
4649
signalName2, tag),
4750
Check: resource.ComposeTestCheckFunc(
4851
testCheckCSECustomInsightExists(resourceName, &CustomInsight),
4952
testCheckCustomInsightValues(&CustomInsight, description, enabled,
50-
ordered, nameUpdated, severityUpdated, signalName1,
53+
ordered, nameUpdated, severityUpdated, minimumSignalSeverityUpdated, insightSeverity, signalName1,
5154
signalName2, tag),
5255
resource.TestCheckResourceAttrSet(resourceName, "id"),
5356
),
5457
},
58+
{
59+
ResourceName: resourceName,
60+
ImportState: true,
61+
ImportStateVerify: true,
62+
},
5563
},
5664
})
5765
}
@@ -81,19 +89,22 @@ func testAccCSECustomInsightDestroy(s *terraform.State) error {
8189

8290
func testCreateCSECustomInsightConfig(
8391
description string, enabled bool, ordered bool, name string,
84-
severity string, signalName1 string, signalName2 string, tag string) string {
92+
severity string, minimumSignalSeverity int, insightSeverity string, signalName1 string, signalName2 string, tag string) string {
8593
return fmt.Sprintf(`
8694
resource "sumologic_cse_custom_insight" "custom_insight" {
8795
description = "%s"
8896
enabled = %t
8997
ordered = %t
9098
name = "%s"
9199
severity = "%s"
100+
dynamic_severity {
101+
minimum_signal_severity = "%d"
102+
insight_severity = "%s"
103+
}
92104
signal_names = ["%s", "%s"]
93105
tags = ["%s"]
94106
}
95-
`, description, enabled, ordered, name, severity, signalName1,
96-
signalName2, tag)
107+
`, description, enabled, ordered, name, severity, minimumSignalSeverity, insightSeverity, signalName1, signalName2, tag)
97108
}
98109

99110
func testCheckCSECustomInsightExists(n string, CustomInsight *CSECustomInsight) resource.TestCheckFunc {
@@ -120,7 +131,7 @@ func testCheckCSECustomInsightExists(n string, CustomInsight *CSECustomInsight)
120131
}
121132

122133
func testCheckCustomInsightValues(CustomInsight *CSECustomInsight, description string,
123-
enabled bool, ordered bool, name string, severity string, signalName1 string,
134+
enabled bool, ordered bool, name string, severity string, minimumSignalSeverity int, insightSeverity string, signalName1 string,
124135
signalName2 string, tag string) resource.TestCheckFunc {
125136
return func(s *terraform.State) error {
126137
if CustomInsight.Description != description {
@@ -138,8 +149,14 @@ func testCheckCustomInsightValues(CustomInsight *CSECustomInsight, description s
138149
if CustomInsight.Severity != severity {
139150
return fmt.Errorf("bad severity, expected \"%s\", got %#v", severity, CustomInsight.Severity)
140151
}
141-
if CustomInsight.SignalNames[0] != signalName1 {
142-
return fmt.Errorf("bad signalName1, expected \"%s\", got %#v", signalName1, CustomInsight.SignalNames[0])
152+
if CustomInsight.Severity != severity {
153+
return fmt.Errorf("bad severity, expected \"%s\", got %#v", severity, CustomInsight.Severity)
154+
}
155+
if CustomInsight.DynamicSeverity[0].MinimumSignalSeverity != minimumSignalSeverity {
156+
return fmt.Errorf("bad minimumSignalSeverity, expected \"%d\", got %#v", minimumSignalSeverity, CustomInsight.DynamicSeverity[0].MinimumSignalSeverity)
157+
}
158+
if CustomInsight.DynamicSeverity[0].InsightSeverity != insightSeverity {
159+
return fmt.Errorf("bad insightSeverity, expected \"%s\", got %#v", insightSeverity, CustomInsight.DynamicSeverity[0].InsightSeverity)
143160
}
144161
if CustomInsight.SignalNames[1] != signalName2 {
145162
return fmt.Errorf("bad signalName2, expected \"%s\", got %#v", signalName2, CustomInsight.SignalNames[1])

sumologic/sumologic_cse_custom_insight.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,20 @@ type CSECustomInsightResponse struct {
7272
CSECustomInsight CSECustomInsight `json:"data"`
7373
}
7474

75+
type DynamicSeverity struct {
76+
MinimumSignalSeverity int `json:"minimumSignalSeverity"`
77+
InsightSeverity string `json:"insightSeverity"`
78+
}
79+
7580
type CSECustomInsight struct {
76-
ID string `json:"id,omitempty"`
77-
Description string `json:"description"`
78-
Enabled bool `json:"enabled"`
79-
Name string `json:"name"`
80-
Ordered bool `json:"ordered"`
81-
RuleIds []string `json:"ruleIds"`
82-
Severity string `json:"severity"`
83-
SignalNames []string `json:"signalNames"`
84-
Tags []string `json:"tags"`
81+
ID string `json:"id,omitempty"`
82+
Description string `json:"description"`
83+
Enabled bool `json:"enabled"`
84+
Name string `json:"name"`
85+
Ordered bool `json:"ordered"`
86+
RuleIds []string `json:"ruleIds"`
87+
Severity string `json:"severity"`
88+
DynamicSeverity []DynamicSeverity `json:"dynamicSeverity"`
89+
SignalNames []string `json:"signalNames"`
90+
Tags []string `json:"tags"`
8591
}

0 commit comments

Comments
 (0)