mirror of
https://github.com/hanzoai/o11y.git
synced 2026-11-03 02:04:48 +00:00
* debrand: signoz/SigNoz/SIGNOZ -> o11y/O11y/O11Y across the tree Rename all SigNoz *branding* to O11y in file contents, file/dir names, package names, env vars, config keys, comments, docs, SDK code, and the ClickHouse schema identifiers the querier reads. Collector dependency: - Repoint github.com/hanzoai/signoz-otel-collector -> github.com/hanzoai/otel-collector and bump v0.144.6 -> v0.144.7 (go.mod + go.sum reconciled via go mod tidy). Internal package paths also debranded upstream: signozschemamigrator -> o11yschemamigrator, signozlogspipelineprocessor -> o11ylogspipelineprocessor. - Fix: v0.144.7 dropped otelconst.DistributedFieldKeysTable from the collector's public constants; pin FieldKeysTable = "distributed_field_keys" locally in pkg/telemetrymetadata/tables.go. Package/dir renames (package decl + all importers): pkg/apiserver/signozapiserver -> o11yapiserver, plus signozalertmanager, signozauthzapi, signozglobal, signozquerier, signozruler, and pkg/signoz -> pkg/o11y. Schema (read plane): signoz_traces/metrics/logs/metadata/analytics/meter and signoz_index_v3/index_v2/error_index_v2/spans (+ distributed_*) -> o11y_*. Data-preserving cutover migration added: deploy/clickhouse/migrations/0001_rename_signoz_to_o11y.sql (metadata-only RENAME DATABASE/TABLE, no drop/recreate). Preserved (attribution / external / wire contracts): - LICENSE + NOTICE verbatim (incl. "software from SigNoz", "Copyright ... SigNoz Inc."). - Upstream github.com/SigNoz/* repo URLs + @SigNoz/* CODEOWNERS teams. - Billing resource-attribute regex "signoz.workspace.*" (external wire contract). go build ./pkg/... ./cmd/... = 0; gofmt clean; renamed+schema pkg tests pass. * o11y: bump collector to v0.144.8 (o11y_* physical schema writer) + lockstep deploy plan Collector v0.144.8's schema-migrator + exporters now CREATE/WRITE the same o11y_* physical databases/tables the querier reads and the RENAME migration (0001_rename_signoz_to_o11y.sql) targets. Cross-checked byte-identical: writer DB set == migration target DB set (6); writer prefixed-table set == migration target table set (8); o11y querier reads and cloud reads are subsets of that set. Zero table-name mismatches between writer, readers, and migration. Collector go.mod unchanged between v0.144.7 and v0.144.8 (identical go.mod hash) — pure source rename, no module-graph change. Adds deploy/clickhouse/DEPLOY_signoz_to_o11y_cutover.md: the lockstep order (collector v0.144.8 -> RENAME migration -> o11y+cloud readers) with a fresh/scratch-ClickHouse pre-flight (create via migrator, emit trace+metric, query back) and rollback. Ships together or telemetry blackholes. go build ./pkg/... ./cmd/community = 0.
119 lines
3.4 KiB
Go
119 lines
3.4 KiB
Go
package v4
|
|
|
|
import (
|
|
"github.com/hanzoai/o11y/pkg/query-service/constants"
|
|
v3 "github.com/hanzoai/o11y/pkg/query-service/model/v3"
|
|
"github.com/hanzoai/o11y/pkg/query-service/utils"
|
|
)
|
|
|
|
// if the field is timestamp/id/value we don't need to enrich
|
|
// if the field is static we don't need to enrich
|
|
// for all others we need to enrich
|
|
// an attribute/resource can be materialized/dematerialized
|
|
// but the query should work regardless and shouldn't fail
|
|
func isEnriched(field v3.AttributeKey) bool {
|
|
// if it is timestamp/id dont check
|
|
if field.Key == "timestamp" || field.Key == constants.O11yOrderByValue {
|
|
return true
|
|
}
|
|
|
|
// we need to check if the field is static and return false if isColumn is not set
|
|
if _, ok := constants.StaticFieldsTraces[field.Key]; ok && field.IsColumn {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func enrichKeyWithMetadata(key v3.AttributeKey, keys map[string]v3.AttributeKey) v3.AttributeKey {
|
|
if isEnriched(key) {
|
|
return key
|
|
}
|
|
|
|
if v, ok := constants.StaticFieldsTraces[key.Key]; ok {
|
|
return v
|
|
}
|
|
|
|
for _, tkey := range utils.GenerateEnrichmentKeys(key) {
|
|
if val, ok := keys[tkey]; ok {
|
|
return val
|
|
}
|
|
}
|
|
|
|
// enrich with default values if metadata is not found
|
|
if key.Type == "" {
|
|
key.Type = v3.AttributeKeyTypeTag
|
|
}
|
|
if key.DataType == "" {
|
|
key.DataType = v3.AttributeKeyDataTypeString
|
|
}
|
|
return key
|
|
}
|
|
|
|
func Enrich(params *v3.QueryRangeParamsV3, keys map[string]v3.AttributeKey) {
|
|
if params.CompositeQuery.QueryType != v3.QueryTypeBuilder {
|
|
return
|
|
}
|
|
|
|
for _, query := range params.CompositeQuery.BuilderQueries {
|
|
if query.DataSource == v3.DataSourceTraces {
|
|
EnrichTracesQuery(query, keys)
|
|
}
|
|
}
|
|
}
|
|
|
|
func EnrichTracesQuery(query *v3.BuilderQuery, keys map[string]v3.AttributeKey) {
|
|
// enrich aggregate attribute
|
|
query.AggregateAttribute = enrichKeyWithMetadata(query.AggregateAttribute, keys)
|
|
|
|
// enrich filter items
|
|
if query.Filters != nil && len(query.Filters.Items) > 0 {
|
|
for idx, filter := range query.Filters.Items {
|
|
query.Filters.Items[idx].Key = enrichKeyWithMetadata(filter.Key, keys)
|
|
// if the serviceName column is used, use the corresponding resource attribute as well during filtering
|
|
// since there is only one of these resource attributes we are adding it here directly.
|
|
// move it somewhere else if this list is big
|
|
if filter.Key.Key == "serviceName" {
|
|
query.Filters.Items[idx].Key = v3.AttributeKey{
|
|
Key: "service.name",
|
|
DataType: v3.AttributeKeyDataTypeString,
|
|
Type: v3.AttributeKeyTypeResource,
|
|
IsColumn: false,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// enrich group by
|
|
for idx, groupBy := range query.GroupBy {
|
|
query.GroupBy[idx] = enrichKeyWithMetadata(groupBy, keys)
|
|
}
|
|
|
|
// enrich order by
|
|
query.OrderBy = enrichOrderBy(query.OrderBy, keys)
|
|
|
|
// enrich select columns
|
|
for idx, selectColumn := range query.SelectColumns {
|
|
query.SelectColumns[idx] = enrichKeyWithMetadata(selectColumn, keys)
|
|
}
|
|
|
|
}
|
|
|
|
func enrichOrderBy(items []v3.OrderBy, keys map[string]v3.AttributeKey) []v3.OrderBy {
|
|
enrichedItems := []v3.OrderBy{}
|
|
for i := 0; i < len(items); i++ {
|
|
attributeKey := enrichKeyWithMetadata(v3.AttributeKey{
|
|
Key: items[i].ColumnName,
|
|
}, keys)
|
|
enrichedItems = append(enrichedItems, v3.OrderBy{
|
|
ColumnName: items[i].ColumnName,
|
|
Order: items[i].Order,
|
|
Key: attributeKey.Key,
|
|
DataType: attributeKey.DataType,
|
|
Type: attributeKey.Type,
|
|
IsColumn: attributeKey.IsColumn,
|
|
})
|
|
}
|
|
return enrichedItems
|
|
}
|