{"record":{"id":"45580fce85e7a8bf","repo":"SigNoz/signoz","slug":"panel-type-is-invalid-w","errorCode":null,"errorMessage":"panel type is invalid: %w","messagePattern":"panel type is invalid: %w","errorType":"validation","errorClass":null,"httpStatus":400,"severity":"error","filePath":"pkg/query-service/model/v3/v3.go","lineNumber":642,"sourceCode":"\n\tif c.QueryType == QueryTypeClickHouseSQL {\n\t\tfor name, query := range c.ClickHouseQueries {\n\t\t\tif err := query.Validate(); err != nil {\n\t\t\t\treturn fmt.Errorf(\"clickhouse query %s is invalid: %w\", name, err)\n\t\t\t}\n\t\t}\n\t}\n\n\tif c.QueryType == QueryTypePromQL {\n\t\tfor name, query := range c.PromQueries {\n\t\t\tif err := query.Validate(); err != nil {\n\t\t\t\treturn fmt.Errorf(\"prom query %s is invalid: %w\", name, err)\n\t\t\t}\n\t\t}\n\t}\n\n\tif err := c.PanelType.Validate(); err != nil {\n\t\treturn fmt.Errorf(\"panel type is invalid: %w\", err)\n\t}\n\n\tif err := c.QueryType.Validate(); err != nil {\n\t\treturn fmt.Errorf(\"query type is invalid: %w\", err)\n\t}\n\n\treturn nil\n}\n\ntype Temporality string\n\nconst (\n\tUnspecified Temporality = \"Unspecified\"\n\tDelta       Temporality = \"Delta\"\n\tCumulative  Temporality = \"Cumulative\"\n)\n\nfunc (t *Temporality) Scan(src interface{}) error {","sourceCodeStart":624,"sourceCodeEnd":660,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/model/v3/v3.go#L624-L660","documentation":"Thrown by CompositeQuery.Validate when the panel type string is not one of the recognized PanelType values (e.g. \"graph\", \"value\", \"table\", \"list\", \"trace\"). The %w wraps PanelType.Validate's 'invalid panel type' error.","triggerScenarios":"Passing an unknown panel type like \"timeseries\" or \"\" in a composite query payload.","commonSituations":"Client UI version mismatch where new panel types aren't supported by an older query service, or typos in hand-built payloads.","solutions":["Use one of the supported PanelType constants exactly","Check the server version's v3.go for the accepted enum values","Upgrade the query service if the client sends a newer panel type"],"exampleFix":"// before\n{\"panelType\":\"timeseries\"}\n// after\n{\"panelType\":\"graph\"}","handlingStrategy":"type-guard","validationCode":"var validPanels = map[v3.PanelType]bool{v3.PanelTypeGraph:true, v3.PanelTypeValue:true, v3.PanelTypeTable:true, v3.PanelTypeList:true, v3.PanelTypeTrace:true}\nif !validPanels[c.PanelType] { return errors.New(\"unsupported panel type\") }","typeGuard":"func isValidPanelType(p v3.PanelType) bool { switch p { case v3.PanelTypeGraph, v3.PanelTypeValue, v3.PanelTypeTable, v3.PanelTypeList, v3.PanelTypeTrace: return true }; return false }","tryCatchPattern":null,"preventionTips":["Pin client and server versions to the same enum set","Use generated constants instead of string literals"],"tags":["go","enum-validation","panel-type"],"backgroundTag":"invalid-enum-value","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}