SigNoz/signoz · error
ErrCodeDashboardInvalidWidgetQuery
ErrCodeDashboardInvalidWidgetQuery
Error message
invalid query request
What it means
GetWidgetQuery builds a QueryRangeRequest by marshalling an intermediate map (queryRangeReq) and unmarshalling into querybuildertypesv5.QueryRangeRequest. This first 'invalid query request' fires when that intermediate map cannot be marshalled — e.g. a value inside the request map is a func/chan or otherwise non-serializable.
Source
Thrown at pkg/types/dashboardtypes/dashboard.go:431
}
queryRangeReq := map[string]any{
"schemaVersion": "v1",
"start": startTime,
"end": endTime,
"requestType": dashboard.getQueryRequestTypeFromPanelType(widgetData.PanelTypes),
"compositeQuery": map[string]any{
"queries": compositeQueries,
},
"formatOptions": map[string]any{
"fillGaps": widgetData.FillGaps,
"formatTableResultForUI": widgetData.PanelTypes == "table",
},
}
req, err := json.Marshal(queryRangeReq)
if err != nil {
return nil, errors.Wrapf(err, errors.TypeInvalidInput, ErrCodeDashboardInvalidWidgetQuery, "invalid query request")
}
queryRangeRequest := new(querybuildertypesv5.QueryRangeRequest)
err = json.Unmarshal(req, queryRangeRequest)
if err != nil {
return nil, errors.Wrapf(err, errors.TypeInvalidInput, ErrCodeDashboardInvalidWidgetQuery, "invalid query request")
}
return queryRangeRequest, nil
}
func (dashboard *Dashboard) getQueryRequestTypeFromPanelType(panelType string) querybuildertypesv5.RequestType {
switch panelType {
case "graph", "bar":
return querybuildertypesv5.RequestTypeTimeSeries
case "table", "pie", "value":
return querybuildertypesv5.RequestTypeScalar
case "trace":View on GitHub (pinned to 5069bf80b0)
Solutions
- Inspect the widget's query data and remove non-serializable values
- Keep widget query data limited to plain JSON-compatible types
- Wrap calls to GetWidgetQuery and log the widget definition when it fails
Example fix
// before req["start"] = someFunc // after req["start"] = "now-1h"
Defensive patterns
Strategy: validation
Validate before calling
if _, err := json.Marshal(widgetQueryData); err != nil {
return fmt.Errorf("widget query data contains non-serializable values: %w", err)
} Try / catch
req, err := d.GetWidgetQuery(i, ...)
if err != nil && strings.Contains(err.Error(), "invalid query request") {
return errors.New("widget query could not be converted to a QueryRangeRequest; check widget definition")
} Prevention
- Keep widget query fields to plain JSON types
- Log the widget definition alongside the failure for diagnosis
When it happens
Trigger: Invoking GetWidgetQuery where composed request values (from widget data) include a non-JSON-serializable Go value, causing json.Marshal(queryRangeReq) to fail.
Common situations: Programmatically built widget/query objects containing Go-native types; custom types in widget query data lacking proper serialization; edge-case composite data from integrations.
Related errors
- dashboard_invalid_widget_query
- ErrCodeDashboardInvalidData
- CodeLicenseUnavailable
- CodeInvalidInput
- CodeForbidden
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/aad7825654fa6013.
Report an issue: GitHub.