mirror of
https://github.com/SigNoz/signoz.git
synced 2026-09-10 13:30:42 +01:00
Some checks failed
build-staging / prepare (push) Has been cancelled
build-staging / js-build (push) Has been cancelled
build-staging / go-build (push) Has been cancelled
build-staging / staging (push) Has been cancelled
cacheci / tests (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
#### Description - `fields/values` returns `boolValues` for bool fields: static span fields such as `has_error`, stored bool attributes (decided by a row-existence check, so they take no limit slots), and keys the caller declares bool. `isRoot` and `isEntryPoint` return `true` only, matching the condition builder. - `fields/values` honors `startUnixMilli` for logs and traces against the tag tables. The predicate is `toDate(unix_milli / 1000) >= toDate(start)`, the partition expression, because the tag tables deduplicate a value per day and keep whichever hour was inserted last. For traces this means "span started on or after the start's day", for logs "ingested on or after the start's day". `endUnixMilli` is ignored. - `fields/keys` honors `fieldContext` and `fieldDataType` for the static intrinsic and calculated keys, matches them case-insensitively, types `isRoot`/`isEntryPoint` as bool, gives meter keys a data type, filters the traces keys table by tag type for the scope context, and no longer returns early for the log and scope contexts (logs and audit). - The span context keeps returning attribute keys, since queries spell span attributes as `span.<name>`. - Default quick filters name the span and log fields the way the fields API serves them (`has_error` as a span bool, `name`, `duration_nano`, `response_status_code`, `http_host`, `http_url`, `trace_id` as span fields, `severity_text` as a log field). Migration 126 rewrites the static fields of every stored quick filter the same way, whatever context the legacy seeds gave them. Deprecated names such as `hasError` are not served. - The API-backed checkbox hook merges `boolValues` into its options; the `has_error` title is kept. - The fields/values handler no longer drops `boolValues` from the response. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
95 lines
2.6 KiB
Go
95 lines
2.6 KiB
Go
package implfields
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/SigNoz/signoz/pkg/factory"
|
|
"github.com/SigNoz/signoz/pkg/http/binding"
|
|
"github.com/SigNoz/signoz/pkg/http/render"
|
|
"github.com/SigNoz/signoz/pkg/modules/fields"
|
|
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
|
"github.com/SigNoz/signoz/pkg/types/telemetrytypes"
|
|
"github.com/SigNoz/signoz/pkg/valuer"
|
|
)
|
|
|
|
type handler struct {
|
|
telemetryMetadataStore telemetrytypes.MetadataStore
|
|
}
|
|
|
|
func NewHandler(settings factory.ProviderSettings, telemetryMetadataStore telemetrytypes.MetadataStore) fields.Handler {
|
|
return &handler{
|
|
telemetryMetadataStore: telemetryMetadataStore,
|
|
}
|
|
}
|
|
|
|
func (handler *handler) GetFieldsKeys(rw http.ResponseWriter, req *http.Request) {
|
|
ctx := req.Context()
|
|
|
|
var params telemetrytypes.PostableFieldKeysParams
|
|
if err := binding.Query.BindQuery(req.URL.Query(), ¶ms); err != nil {
|
|
render.Error(rw, err)
|
|
return
|
|
}
|
|
|
|
fieldKeySelector := telemetrytypes.NewFieldKeySelectorFromPostableFieldKeysParams(params)
|
|
|
|
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
if err != nil {
|
|
render.Error(rw, err)
|
|
return
|
|
}
|
|
|
|
keys, complete, err := handler.telemetryMetadataStore.GetKeys(ctx, valuer.MustNewUUID(claims.OrgID), fieldKeySelector)
|
|
if err != nil {
|
|
render.Error(rw, err)
|
|
return
|
|
}
|
|
|
|
render.Success(rw, http.StatusOK, &telemetrytypes.GettableFieldKeys{
|
|
Keys: keys,
|
|
Complete: complete,
|
|
})
|
|
}
|
|
|
|
func (handler *handler) GetFieldsValues(rw http.ResponseWriter, req *http.Request) {
|
|
ctx := req.Context()
|
|
|
|
var params telemetrytypes.PostableFieldValueParams
|
|
if err := binding.Query.BindQuery(req.URL.Query(), ¶ms); err != nil {
|
|
render.Error(rw, err)
|
|
return
|
|
}
|
|
|
|
fieldValueSelector := telemetrytypes.NewFieldValueSelectorFromPostableFieldValueParams(params)
|
|
|
|
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
if err != nil {
|
|
render.Error(rw, err)
|
|
return
|
|
}
|
|
|
|
allValues, allComplete, err := handler.telemetryMetadataStore.GetAllValues(ctx, valuer.MustNewUUID(claims.OrgID), fieldValueSelector)
|
|
if err != nil {
|
|
render.Error(rw, err)
|
|
return
|
|
}
|
|
|
|
relatedValues, relatedComplete, err := handler.telemetryMetadataStore.GetRelatedValues(ctx, valuer.MustNewUUID(claims.OrgID), fieldValueSelector)
|
|
if err != nil {
|
|
// we don't want to return error if we fail to get related values for some reason
|
|
relatedValues = []string{}
|
|
}
|
|
|
|
values := &telemetrytypes.TelemetryFieldValues{
|
|
StringValues: allValues.StringValues,
|
|
BoolValues: allValues.BoolValues,
|
|
NumberValues: allValues.NumberValues,
|
|
RelatedValues: relatedValues,
|
|
}
|
|
|
|
render.Success(rw, http.StatusOK, &telemetrytypes.GettableFieldValues{
|
|
Values: values,
|
|
Complete: allComplete && relatedComplete,
|
|
})
|
|
}
|