Skip to content

Commit 4cffb88

Browse files
authored
fix: Solve crash when importing unsupported dashboard panels (#73)
* fix: Solve crash when importing unsupported dashboard * docs: Add unsupported panel message while importing
1 parent 68c09a8 commit 4cffb88

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

sysdig/resource_sysdig_monitor_dashboard.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package sysdig
22

33
import (
44
"context"
5+
"fmt"
56
"github.com/draios/terraform-provider-sysdig/sysdig/monitor/model"
67
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
78
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -228,7 +229,7 @@ func panelsFromResourceData(data *schema.ResourceData) (panels []*model.Panels,
228229
case "number":
229230
panelType = model.PanelTypeNumber
230231
default:
231-
panic("unreachable code")
232+
return nil, fmt.Errorf("unsupported panel type %s", panelInfo["type"])
232233
}
233234

234235
panel := model.NewPanel(panelInfo["name"].(string), panelInfo["description"].(string), panelType)
@@ -238,7 +239,11 @@ func panelsFromResourceData(data *schema.ResourceData) (panels []*model.Panels,
238239
return nil, err
239240
}
240241

241-
queries := queriesFromResourceData(panelInfo, panel)
242+
queries, err := queriesFromResourceData(panelInfo, panel)
243+
if err != nil {
244+
return nil, err
245+
}
246+
242247
_, err = panel.AddQueries(queries...)
243248
if err != nil {
244249
return nil, err
@@ -249,7 +254,7 @@ func panelsFromResourceData(data *schema.ResourceData) (panels []*model.Panels,
249254
return
250255
}
251256

252-
func queriesFromResourceData(panelInfo map[string]interface{}, panel *model.Panels) (newQueries []*model.AdvancedQueries) {
257+
func queriesFromResourceData(panelInfo map[string]interface{}, panel *model.Panels) (newQueries []*model.AdvancedQueries, err error) {
253258
for _, queryItr := range panelInfo["query"].(*schema.Set).List() {
254259
queryInfo := queryItr.(map[string]interface{})
255260

@@ -269,7 +274,7 @@ func queriesFromResourceData(panelInfo map[string]interface{}, panel *model.Pane
269274
case "time":
270275
promqlQuery.WithTimeFormat()
271276
default:
272-
panic("unreachable code")
277+
return nil, fmt.Errorf("unsupported query format unit: %s", queryInfo["unit"])
273278
}
274279

275280
newQueries = append(newQueries, promqlQuery)
@@ -302,7 +307,7 @@ func dashboardToResourceData(dashboard *model.Dashboard, data *schema.ResourceDa
302307
case model.FormatUnitTime:
303308
unit = "time"
304309
default:
305-
panic("unreachable code")
310+
return fmt.Errorf("unsupported query format unit: %s", query.Format.Unit)
306311
}
307312

308313
queries = append(queries, map[string]interface{}{
@@ -326,7 +331,7 @@ func dashboardToResourceData(dashboard *model.Dashboard, data *schema.ResourceDa
326331
case model.PanelTypeNumber:
327332
panelType = "number"
328333
default:
329-
panic("unreachable code")
334+
return fmt.Errorf("unsupported panel type %s", panel.Type)
330335
}
331336

332337
panels = append(panels, map[string]interface{}{

website/docs/r/sysdig_monitor_dashboard.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,16 @@ Monitor dashboards can be imported using the dashboard ID, e.g.
119119

120120
```
121121
$ terraform import sysdig_monitor_dashboard.example 12345
122-
```
122+
```
123+
124+
Only dashboards that contain supported panels can be imported. Currently supported panel types are:
125+
- PromQL timecharts
126+
- PromQL numbers
127+
128+
Only dashboards that contain supported query types can be imported. Currently supported query types:
129+
- Percent
130+
- Data
131+
- Data rate
132+
- Number
133+
- Number rate
134+
- Time

0 commit comments

Comments
 (0)