SigNoz/signoz · error · errors.Error
CodeInvalidInput
CodeInvalidInput
Error message
oidc: missing email in claims
What it means
Returned by buildDeltaMetricQueryForTable when the aggregate operator is v3.AggregateOperatorNoOp and the target is a table view. NoOp means 'return raw samples unchanged', which only makes sense for time-series output; a table view requires a scalar aggregate per group, so the builder explicitly rejects it.
Source
Thrown at ee/authn/callbackauthn/oidccallbackauthn/authn.go:119
return nil, errors.Newf(errors.TypeInternal, errors.CodeInternal, "oidc: failed to get token").WithAdditional(err.Error())
}
claims, err := a.claimsFromIDToken(ctx, authDomain, oidcProvider, token)
if err != nil && !errors.Ast(err, errors.TypeNotFound) {
return nil, err
}
if claims == nil && oidcConfig.GetUserInfo {
claims, err = a.claimsFromUserInfo(ctx, oidcProvider, token)
if err != nil {
return nil, err
}
}
emailClaim, ok := claims[oidcConfig.ClaimMapping.Email].(string)
if !ok {
return nil, errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "oidc: missing email in claims")
}
email, err := valuer.NewEmail(emailClaim)
if err != nil {
return nil, errors.Newf(errors.TypeInvalidInput, errors.CodeInvalidInput, "oidc: failed to parse email").WithAdditional(err.Error())
}
if !oidcConfig.InsecureSkipEmailVerified {
emailVerifiedClaim, ok := claims["email_verified"].(bool)
if !ok {
return nil, errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "oidc: missing email_verified in claims")
}
if !emailVerifiedClaim {
return nil, errors.New(errors.TypeForbidden, errors.CodeForbidden, "oidc: email is not verified")
}
}
View on GitHub (pinned to 5069bf80b0)
Solutions
- Set an actual aggregate operator (avg, sum, max, min, count, count_distinct, or a *_rate variant) for table panels
- Keep NoOp queries in graph/time-series view where raw series rendering is supported
- Guard in your own layer: reject NoOp+table combinations before calling PrepareMetricQuery with a clearer message
Example fix
// before op := v3.AggregateOperatorNoOp q, err := PrepareMetricQuery(..., op, v3.FormatTable) // after op := v3.AggregateOperatorAvg // pick a real aggregation for table output q, err := PrepareMetricQuery(..., op, v3.FormatTable)
Defensive patterns
Strategy: validation
Validate before calling
if qp.AggregateOperator == v3.AggregateOperatorNoOp && qp.Format == v3.FormatTable {
return errors.New("noop requires a time-series view; choose an aggregate for tables")
} Type guard
func isNoOp(op v3.AggregateOperator) bool { return op == v3.AggregateOperatorNoOp } Try / catch
if _, err := v3.PrepareMetricQuery(...); err != nil && strings.Contains(err.Error(), "noop is not supported") {
qp.AggregateOperator = v3.AggregateOperatorAvg // fallback aggregate
return v3.PrepareMetricQuery(...)
} Prevention
- UI should disable noop option for table panels
- Default new table panels to avg
When it happens
Trigger: PrepareMetricQuery / dashboard or API requests where mq.AggregateOperator == v3.AggregateOperatorNoOp (or the string 'noop') combined with a table/list panel format, routing execution into the delta table builder.
Common situations: Exporting raw metric points into a table widget; migrating a query from the explore (graph) view to a table panel without changing the operator; UI defaults leaving operator as noop when a user only changes the panel type.
Related errors
- CodeLicenseUnavailable
- CodeForbidden
- rate is not supported for table view
- noop is not supported for table view
- CodeNotFound
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/26d69bd41e58a214.
Report an issue: GitHub.