From 3758ee7451bedfbbf606295aaaf64ffa4a9a1bda Mon Sep 17 00:00:00 2001 From: Ekansh Gupta Date: Mon, 12 May 2025 16:20:47 +0530 Subject: [PATCH] =?UTF-8?q?fix:=20changed=20the=20keys=20in=20the=20defaul?= =?UTF-8?q?t=20quick=20filters=20to=20actual=20keys=20in=20=E2=80=A6=20(#7?= =?UTF-8?q?863)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: changed the keys in the default quick filters to actual keys in the v3.attributekeys * fix: changed the keys in the default quick filters to actual keys in the v3.attributekeys * fix: changed the keys in the default quick filters to actual keys in the v3.attributekeys * fix: changed the keys in the default quick filters to actual keys in the v3.attributekeys * fix: changed the keys in the default quick filters to actual keys in the v3.attributekeys --- pkg/signoz/provider.go | 1 + pkg/sqlmigration/031_update_quick_filters.go | 103 +++++++++++++++++++ pkg/types/quickfiltertypes/filter.go | 32 +++--- 3 files changed, 120 insertions(+), 16 deletions(-) create mode 100644 pkg/sqlmigration/031_update_quick_filters.go diff --git a/pkg/signoz/provider.go b/pkg/signoz/provider.go index 9b35c4cf5c..85e832760d 100644 --- a/pkg/signoz/provider.go +++ b/pkg/signoz/provider.go @@ -75,6 +75,7 @@ func NewSQLMigrationProviderFactories(sqlstore sqlstore.SQLStore) factory.NamedM sqlmigration.NewUpdateOrganizationsFactory(sqlstore), sqlmigration.NewDropGroupsFactory(sqlstore), sqlmigration.NewCreateQuickFiltersFactory(sqlstore), + sqlmigration.NewUpdateQuickFiltersFactory(sqlstore), ) } diff --git a/pkg/sqlmigration/031_update_quick_filters.go b/pkg/sqlmigration/031_update_quick_filters.go new file mode 100644 index 0000000000..3f413548de --- /dev/null +++ b/pkg/sqlmigration/031_update_quick_filters.go @@ -0,0 +1,103 @@ +package sqlmigration + +import ( + "context" + "database/sql" + "github.com/SigNoz/signoz/pkg/errors" + "github.com/SigNoz/signoz/pkg/factory" + "github.com/SigNoz/signoz/pkg/sqlstore" + "github.com/SigNoz/signoz/pkg/types/quickfiltertypes" + "github.com/SigNoz/signoz/pkg/valuer" + "github.com/uptrace/bun" + "github.com/uptrace/bun/migrate" +) + +type updateQuickFilters struct { + store sqlstore.SQLStore +} + +func NewUpdateQuickFiltersFactory(store sqlstore.SQLStore) factory.ProviderFactory[SQLMigration, Config] { + return factory.NewProviderFactory(factory.MustNewName("update_quick_filters"), func(ctx context.Context, ps factory.ProviderSettings, c Config) (SQLMigration, error) { + return newUpdateQuickFilters(ctx, ps, c, store) + }) +} + +func newUpdateQuickFilters(_ context.Context, _ factory.ProviderSettings, _ Config, store sqlstore.SQLStore) (SQLMigration, error) { + return &updateQuickFilters{ + store: store, + }, nil +} + +func (migration *updateQuickFilters) Register(migrations *migrate.Migrations) error { + if err := migrations.Register(migration.Up, migration.Down); err != nil { + return err + } + + return nil +} + +func (migration *updateQuickFilters) Up(ctx context.Context, db *bun.DB) error { + tx, err := db.BeginTx(ctx, nil) + if err != nil { + return err + } + + defer tx.Rollback() + + // Delete all existing quick filters + _, err = tx.NewDelete(). + Table("quick_filter"). + Where("1=1"). // Delete all rows + Exec(ctx) + if err != nil { + return err + } + + // Get all organization IDs as strings + var orgIDs []string + err = tx.NewSelect(). + Table("organizations"). + Column("id"). + Scan(ctx, &orgIDs) + if err != nil { + if err == sql.ErrNoRows { + // No organizations found, commit the transaction (deletion is done) and return + if err := tx.Commit(); err != nil { + return err + } + return nil + } + return err + } + + // For each organization, create new quick filters with the updated NewDefaultQuickFilter function + for _, orgID := range orgIDs { + // Get the updated default quick filters + storableQuickFilters, err := quickfiltertypes.NewDefaultQuickFilter(valuer.MustNewUUID(orgID)) + if err != nil { + return err + } + + // Insert all filters for this organization + _, err = tx.NewInsert(). + Model(&storableQuickFilters). + Exec(ctx) + + if err != nil { + if errors.Ast(migration.store.WrapAlreadyExistsErrf(err, errors.CodeAlreadyExists, "Quick Filter already exists"), errors.TypeAlreadyExists) { + // Skip if filters already exist for this org + continue + } + return err + } + } + + if err := tx.Commit(); err != nil { + return err + } + return nil +} + +func (migration *updateQuickFilters) Down(ctx context.Context, db *bun.DB) error { + return nil +} diff --git a/pkg/types/quickfiltertypes/filter.go b/pkg/types/quickfiltertypes/filter.go index 4a9fe62f96..ecfa9cfdb9 100644 --- a/pkg/types/quickfiltertypes/filter.go +++ b/pkg/types/quickfiltertypes/filter.go @@ -139,21 +139,21 @@ func NewDefaultQuickFilter(orgID valuer.UUID) ([]*StorableQuickFilter, error) { {"key": "duration_nano", "dataType": "float64", "type": "tag"}, {"key": "deployment.environment", "dataType": "string", "type": "resource"}, {"key": "hasError", "dataType": "bool", "type": "tag"}, - {"key": "serviceName", "dataType": "string", "type": "tag"}, - {"key": "name", "dataType": "string", "type": "resource"}, - {"key": "rpcMethod", "dataType": "string", "type": "tag"}, - {"key": "responseStatusCode", "dataType": "string", "type": "resource"}, - {"key": "httpHost", "dataType": "string", "type": "tag"}, - {"key": "httpMethod", "dataType": "string", "type": "tag"}, - {"key": "httpRoute", "dataType": "string", "type": "tag"}, - {"key": "httpUrl", "dataType": "string", "type": "tag"}, - {"key": "traceID", "dataType": "string", "type": "tag"}, + {"key": "service.name", "dataType": "string", "type": "resource"}, + {"key": "name", "dataType": "string", "type": "tag"}, + {"key": "rpc.method", "dataType": "string", "type": "tag"}, + {"key": "response_status_code", "dataType": "string", "type": "tag"}, + {"key": "http_host", "dataType": "string", "type": "tag"}, + {"key": "http.method", "dataType": "string", "type": "tag"}, + {"key": "http.route", "dataType": "string", "type": "tag"}, + {"key": "http_url", "dataType": "string", "type": "tag"}, + {"key": "trace_id", "dataType": "string", "type": "tag"}, } logsFilters := []map[string]interface{}{ {"key": "severity_text", "dataType": "string", "type": "resource"}, {"key": "deployment.environment", "dataType": "string", "type": "resource"}, - {"key": "serviceName", "dataType": "string", "type": "tag"}, + {"key": "service.name", "dataType": "string", "type": "resource"}, {"key": "host.name", "dataType": "string", "type": "resource"}, {"key": "k8s.cluster.name", "dataType": "string", "type": "resource"}, {"key": "k8s.deployment.name", "dataType": "string", "type": "resource"}, @@ -163,18 +163,18 @@ func NewDefaultQuickFilter(orgID valuer.UUID) ([]*StorableQuickFilter, error) { apiMonitoringFilters := []map[string]interface{}{ {"key": "deployment.environment", "dataType": "string", "type": "resource"}, - {"key": "serviceName", "dataType": "string", "type": "tag"}, - {"key": "rpcMethod", "dataType": "string", "type": "tag"}, + {"key": "service.name", "dataType": "string", "type": "tag"}, + {"key": "rpc.method", "dataType": "string", "type": "tag"}, } exceptionsFilters := []map[string]interface{}{ {"key": "deployment.environment", "dataType": "string", "type": "resource"}, - {"key": "serviceName", "dataType": "string", "type": "tag"}, + {"key": "service.name", "dataType": "string", "type": "resource"}, {"key": "host.name", "dataType": "string", "type": "resource"}, - {"key": "k8s.cluster.name", "dataType": "string", "type": "tag"}, + {"key": "k8s.cluster.name", "dataType": "string", "type": "resource"}, {"key": "k8s.deployment.name", "dataType": "string", "type": "resource"}, - {"key": "k8s.namespace.name", "dataType": "string", "type": "tag"}, - {"key": "k8s.pod.name", "dataType": "string", "type": "tag"}, + {"key": "k8s.namespace.name", "dataType": "string", "type": "resource"}, + {"key": "k8s.pod.name", "dataType": "string", "type": "resource"}, } tracesJSON, err := json.Marshal(tracesFilters)