Skip to content

Commit 328f50d

Browse files
authored
Merge pull request #720 from SumoLogic/sukhdeep-MET-21556-newMetricsV2Resouce
New Metrics V2 resource which uses V2 endpoints
2 parents 7e270a4 + 7830070 commit 328f50d

File tree

6 files changed

+688
-0
lines changed

6 files changed

+688
-0
lines changed

sumologic/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ func Provider() terraform.ResourceProvider {
116116
"sumologic_local_file_source": resourceSumologicLocalFileSource(),
117117
"sumologic_log_search": resourceSumologicLogSearch(),
118118
"sumologic_metrics_search": resourceSumologicMetricsSearch(),
119+
"sumologic_metrics_search_v2": resourceSumologicMetricsSearchV2(),
119120
"sumologic_rum_source": resourceSumologicRumSource(),
120121
"sumologic_role_v2": resourceSumologicRoleV2(),
121122
"sumologic_azure_event_hub_log_source": resourceSumologicGenericPollingSource(),
Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
package sumologic
2+
3+
import (
4+
"log"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
7+
)
8+
9+
func resourceSumologicMetricsSearchV2() *schema.Resource {
10+
return &schema.Resource{
11+
Create: resourceSumologicMetricsSearchV2Create,
12+
Read: resourceSumologicMetricsSearchV2Read,
13+
Update: resourceSumologicMetricsSearchV2Update,
14+
Delete: resourceSumologicMetricsSearchV2Delete,
15+
Importer: &schema.ResourceImporter{
16+
State: schema.ImportStatePassthrough,
17+
},
18+
19+
Schema: map[string]*schema.Schema{
20+
"title": {
21+
Type: schema.TypeString,
22+
Required: true,
23+
},
24+
"description": {
25+
Type: schema.TypeString,
26+
Optional: true,
27+
},
28+
"time_range": {
29+
Type: schema.TypeList,
30+
Required: true,
31+
MaxItems: 1,
32+
Elem: &schema.Resource{
33+
Schema: GetTimeRangeSchema(),
34+
},
35+
},
36+
"queries": {
37+
Type: schema.TypeList,
38+
Required: true,
39+
Elem: &schema.Resource{
40+
Schema: map[string]*schema.Schema{
41+
"query_key": {
42+
Type: schema.TypeString,
43+
Required: true,
44+
},
45+
"query_string": {
46+
Type: schema.TypeString,
47+
Required: true,
48+
},
49+
"query_type": {
50+
Type: schema.TypeString,
51+
Required: true,
52+
},
53+
"metrics_query_mode": {
54+
Type: schema.TypeString,
55+
Optional: true,
56+
},
57+
},
58+
},
59+
},
60+
"visual_settings": {
61+
Type: schema.TypeString,
62+
Optional: true,
63+
},
64+
"folder_id": {
65+
Type: schema.TypeString,
66+
Optional: true,
67+
},
68+
},
69+
}
70+
}
71+
72+
func resourceSumologicMetricsSearchV2Create(d *schema.ResourceData, meta interface{}) error {
73+
c := meta.(*Client)
74+
75+
if d.Id() == "" {
76+
metricsSearchV2 := resourceToMetricsSearchV2(d)
77+
log.Println("=====================================================================")
78+
log.Printf("creating metrics search - %+v", metricsSearchV2)
79+
log.Println("=====================================================================")
80+
id, err := c.CreateMetricsSearchV2(metricsSearchV2)
81+
if err != nil {
82+
return err
83+
}
84+
85+
d.SetId(id)
86+
}
87+
88+
return resourceSumologicMetricsSearchV2Read(d, meta)
89+
}
90+
91+
func resourceSumologicMetricsSearchV2Read(d *schema.ResourceData, meta interface{}) error {
92+
c := meta.(*Client)
93+
94+
id := d.Id()
95+
metricsSearchV2, err := c.GetMetricsSearchV2(id)
96+
if err != nil {
97+
return err
98+
}
99+
100+
if metricsSearchV2 == nil {
101+
log.Printf("[WARN] MetricsSearch not found, removing from state: %v - %v", id, err)
102+
d.SetId("")
103+
return nil
104+
}
105+
log.Println("=====================================================================")
106+
log.Printf("read metrics search - %+v", metricsSearchV2)
107+
log.Println("=====================================================================")
108+
109+
return setMetricsSearchV2(d, metricsSearchV2)
110+
}
111+
112+
func resourceSumologicMetricsSearchV2Update(d *schema.ResourceData, meta interface{}) error {
113+
c := meta.(*Client)
114+
115+
metricsSearchV2 := resourceToMetricsSearchV2(d)
116+
log.Println("=====================================================================")
117+
log.Printf("updating metrics search - %+v", metricsSearchV2)
118+
log.Println("=====================================================================")
119+
err := c.UpdateMetricsSearchV2(metricsSearchV2)
120+
if err != nil {
121+
return err
122+
}
123+
124+
return resourceSumologicMetricsSearchV2Read(d, meta)
125+
}
126+
127+
func resourceSumologicMetricsSearchV2Delete(d *schema.ResourceData, meta interface{}) error {
128+
c := meta.(*Client)
129+
return c.DeleteMetricsSearchV2(d.Id())
130+
}
131+
132+
func resourceToMetricsSearchV2(d *schema.ResourceData) MetricsSearchV2 {
133+
var timeRange interface{}
134+
if val, ok := d.GetOk("time_range"); ok {
135+
tfTimeRange := val.([]interface{})[0]
136+
timeRange = GetTimeRange(tfTimeRange.(map[string]interface{}))
137+
}
138+
139+
var metricsQueries []MetricsSearchQueryV2
140+
if val, ok := d.GetOk("queries"); ok {
141+
metricsQueryData := val.([]interface{})
142+
for _, data := range metricsQueryData {
143+
metricsQueries = append(metricsQueries, resourceToMetricsSearchMetricsQueryV2([]interface{}{data}))
144+
}
145+
}
146+
147+
return MetricsSearchV2{
148+
ID: d.Id(),
149+
Title: d.Get("title").(string),
150+
Description: d.Get("description").(string),
151+
FolderID: d.Get("folder_id").(string),
152+
VisualSettings: d.Get("visual_settings").(string),
153+
TimeRange: timeRange,
154+
Queries: metricsQueries,
155+
}
156+
}
157+
158+
func resourceToMetricsSearchMetricsQueryV2(data interface{}) MetricsSearchQueryV2 {
159+
metricsSearchQuery := MetricsSearchQueryV2{}
160+
161+
metricsSearchQuerySlice := data.([]interface{})
162+
if len(metricsSearchQuerySlice) > 0 {
163+
metricsSearchQueryObj := metricsSearchQuerySlice[0].(map[string]interface{})
164+
165+
metricsSearchQuery.QueryKey = metricsSearchQueryObj["query_key"].(string)
166+
metricsSearchQuery.QueryString = metricsSearchQueryObj["query_string"].(string)
167+
metricsSearchQuery.QueryType = metricsSearchQueryObj["query_type"].(string)
168+
metricsSearchQuery.MetricsQueryMode = metricsSearchQueryObj["metrics_query_mode"].(string)
169+
}
170+
171+
return metricsSearchQuery
172+
}
173+
174+
func setMetricsSearchV2(d *schema.ResourceData, metricsSearchV2 *MetricsSearchV2) error {
175+
if err := d.Set("title", metricsSearchV2.Title); err != nil {
176+
return err
177+
}
178+
if err := d.Set("description", metricsSearchV2.Description); err != nil {
179+
return err
180+
}
181+
if err := d.Set("folder_id", metricsSearchV2.FolderID); err != nil {
182+
return err
183+
}
184+
if err := d.Set("visual_settings", metricsSearchV2.VisualSettings); err != nil {
185+
return err
186+
}
187+
188+
metricsSearchQueriesV2 := make([]map[string]interface{}, len(metricsSearchV2.Queries))
189+
for i, searchQuery := range metricsSearchV2.Queries {
190+
metricsSearchQueriesV2[i] = getTerraformMetricsSearchQueryV2(searchQuery)
191+
}
192+
if err := d.Set("queries", metricsSearchQueriesV2); err != nil {
193+
return err
194+
}
195+
196+
timeRange := GetTerraformTimeRange(metricsSearchV2.TimeRange.(map[string]interface{}))
197+
if err := d.Set("time_range", timeRange); err != nil {
198+
return err
199+
}
200+
201+
return nil
202+
}
203+
204+
func getTerraformMetricsSearchQueryV2(metricsSearchQueryV2 MetricsSearchQueryV2) map[string]interface{} {
205+
tfMetricsSearchQueryV2 := map[string]interface{}{}
206+
207+
tfMetricsSearchQueryV2["query_key"] = metricsSearchQueryV2.QueryKey
208+
tfMetricsSearchQueryV2["query_string"] = metricsSearchQueryV2.QueryString
209+
tfMetricsSearchQueryV2["query_type"] = metricsSearchQueryV2.QueryType
210+
tfMetricsSearchQueryV2["metrics_query_mode"] = metricsSearchQueryV2.MetricsQueryMode
211+
return tfMetricsSearchQueryV2
212+
}

0 commit comments

Comments
 (0)