{"record":{"id":"4e88ef4b58129733","repo":"SigNoz/signoz","slug":"timeshiftby-param-missing-in-query","errorCode":null,"errorMessage":"timeShiftBy param missing in query","messagePattern":"timeShiftBy param missing in query","errorType":"validation","errorClass":null,"httpStatus":400,"severity":"error","filePath":"pkg/query-service/model/v3/v3.go","lineNumber":1116,"sourceCode":"\n\tfor _, selectColumn := range b.SelectColumns {\n\t\tif err := selectColumn.Validate(); err != nil {\n\t\t\treturn fmt.Errorf(\"select column is invalid %w\", err)\n\t\t}\n\t}\n\n\tif b.Expression == \"\" {\n\t\treturn fmt.Errorf(\"expression is required\")\n\t}\n\n\tif len(b.Functions) > 0 {\n\t\tfor _, function := range b.Functions {\n\t\t\tif err := function.Name.Validate(); err != nil {\n\t\t\t\treturn fmt.Errorf(\"function name is invalid: %w\", err)\n\t\t\t}\n\t\t\tif function.Name == FunctionNameTimeShift {\n\t\t\t\tif len(function.Args) == 0 {\n\t\t\t\t\treturn fmt.Errorf(\"timeShiftBy param missing in query\")\n\t\t\t\t}\n\t\t\t\t_, ok := function.Args[0].(float64)\n\t\t\t\tif !ok {\n\t\t\t\t\t// if string, attempt to convert to float\n\t\t\t\t\ttimeShiftBy, err := strconv.ParseFloat(function.Args[0].(string), 64)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn fmt.Errorf(\"timeShiftBy param should be a number\")\n\t\t\t\t\t}\n\t\t\t\t\tfunction.Args[0] = timeShiftBy\n\t\t\t\t}\n\t\t\t} else if function.Name == FunctionNameEWMA3 ||\n\t\t\t\tfunction.Name == FunctionNameEWMA5 ||\n\t\t\t\tfunction.Name == FunctionNameEWMA7 {\n\t\t\t\tif len(function.Args) == 0 {\n\t\t\t\t\treturn fmt.Errorf(\"alpha param missing in query\")\n\t\t\t\t}\n\t\t\t\talpha, ok := function.Args[0].(float64)\n\t\t\t\tif !ok {","sourceCodeStart":1098,"sourceCodeEnd":1134,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/model/v3/v3.go#L1098-L1134","documentation":"Returned when validating a BuildQuery that applies the timeShift function but its Args slice is empty. The validator requires at least one argument so it can verify/normalize the shift amount.","triggerScenarios":"A query with function Name == FunctionNameTimeShift and len(function.Args) == 0, e.g. JSON with \"functions\":[{\"name\":\"timeShift\"}] and no args array.","commonSituations":"Frontend bug that drops empty args, manual API calls to /api/v3/query_builder that omit args, or templates that conditionally include args and produce none.","solutions":["Add at least one numeric arg representing the shift in seconds, e.g. \"args\":[3600]","If args come from a variable, ensure the variable resolves to a non-empty numeric value before sending the query"],"exampleFix":"// before\n{\"name\":\"timeShift\"}\n// after\n{\"name\":\"timeShift\",\"args\":[3600]}","handlingStrategy":"validation","validationCode":"for _, f := range qb.Functions {\n  if f.Name == v3.FunctionNameTimeShift && len(f.Args) == 0 {\n    return errors.New(\"timeShift requires a shift argument\")\n  }\n}","typeGuard":"func hasTimeShiftArg(f v3.Function) bool { return f.Name != v3.FunctionNameTimeShift || len(f.Args) > 0 }","tryCatchPattern":null,"preventionTips":["Make the timeShift arg required in query-building UI","Unit-test query payloads before submission"],"tags":["signoz","query-builder","timeshift","validation"],"backgroundTag":"query-validation-failed","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}