mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-14 04:26:02 +08:00
feat: quick_filter_fix (#7816)
* feat: quick_filter_fix * feat: added changes related to custom options for quick filters * feat: added changes related to custom options for quick filters
This commit is contained in:
parent
8d6671e362
commit
16e3c185e9
@ -70,7 +70,10 @@ func (s *store) Upsert(ctx context.Context, filter *quickfiltertypes.StorableQui
|
|||||||
Set("updated_at = EXCLUDED.updated_at").
|
Set("updated_at = EXCLUDED.updated_at").
|
||||||
Exec(ctx)
|
Exec(ctx)
|
||||||
|
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *store) Create(ctx context.Context, filters []*quickfiltertypes.StorableQuickFilter) error {
|
func (s *store) Create(ctx context.Context, filters []*quickfiltertypes.StorableQuickFilter) error {
|
||||||
@ -82,5 +85,8 @@ func (s *store) Create(ctx context.Context, filters []*quickfiltertypes.Storable
|
|||||||
On("CONFLICT (org_id, signal) DO NOTHING").
|
On("CONFLICT (org_id, signal) DO NOTHING").
|
||||||
Exec(ctx)
|
Exec(ctx)
|
||||||
|
|
||||||
return err
|
if err != nil {
|
||||||
|
return s.store.WrapAlreadyExistsErrf(err, errors.CodeAlreadyExists, "Quick Filter can not be created")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package sqlmigration
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"github.com/SigNoz/signoz/pkg/errors"
|
||||||
"github.com/SigNoz/signoz/pkg/factory"
|
"github.com/SigNoz/signoz/pkg/factory"
|
||||||
"github.com/SigNoz/signoz/pkg/sqlstore"
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
||||||
"github.com/SigNoz/signoz/pkg/types"
|
"github.com/SigNoz/signoz/pkg/types"
|
||||||
@ -74,27 +75,20 @@ func (m *createQuickFilters) Up(ctx context.Context, db *bun.DB) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// For SQLite, insert each filter individually with proper conflict handling
|
// Insert all filters at once
|
||||||
for _, filter := range storableQuickFilters {
|
_, err = tx.NewInsert().
|
||||||
// Check if the record already exists
|
Model(&storableQuickFilters).
|
||||||
exists, err := tx.NewSelect().
|
Exec(ctx)
|
||||||
Model((*quickFilter)(nil)).
|
|
||||||
Where("org_id = ? AND signal = ?", filter.OrgID, filter.Signal).
|
|
||||||
Exists(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only insert if it doesn't exist
|
|
||||||
if !exists {
|
|
||||||
_, err = tx.NewInsert().
|
|
||||||
Model(&filter).
|
|
||||||
Exec(ctx)
|
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if errors.Ast(m.store.WrapAlreadyExistsErrf(err, errors.CodeAlreadyExists, "Quick Filter already exists"), errors.TypeAlreadyExists) {
|
||||||
|
err := tx.Commit()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit the transaction
|
// Commit the transaction
|
||||||
|
@ -2,7 +2,6 @@ package quickfiltertypes
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
|
||||||
"github.com/SigNoz/signoz/pkg/errors"
|
"github.com/SigNoz/signoz/pkg/errors"
|
||||||
v3 "github.com/SigNoz/signoz/pkg/query-service/model/v3"
|
v3 "github.com/SigNoz/signoz/pkg/query-service/model/v3"
|
||||||
"github.com/SigNoz/signoz/pkg/types"
|
"github.com/SigNoz/signoz/pkg/types"
|
||||||
@ -49,7 +48,7 @@ func NewSignal(s string) (Signal, error) {
|
|||||||
case "exceptions":
|
case "exceptions":
|
||||||
return SignalExceptions, nil
|
return SignalExceptions, nil
|
||||||
default:
|
default:
|
||||||
return Signal{}, errors.New(errors.TypeInternal, errors.CodeInternal, "invalid signal: "+s)
|
return Signal{}, errors.Newf(errors.TypeInternal, errors.CodeInternal, "invalid signal: "+s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +74,7 @@ type UpdatableQuickFilters struct {
|
|||||||
// NewStorableQuickFilter creates a new StorableQuickFilter after validation
|
// NewStorableQuickFilter creates a new StorableQuickFilter after validation
|
||||||
func NewStorableQuickFilter(orgID valuer.UUID, signal Signal, filterJSON []byte) (*StorableQuickFilter, error) {
|
func NewStorableQuickFilter(orgID valuer.UUID, signal Signal, filterJSON []byte) (*StorableQuickFilter, error) {
|
||||||
if orgID.StringValue() == "" {
|
if orgID.StringValue() == "" {
|
||||||
return nil, errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "orgID is required")
|
return nil, errors.Newf(errors.TypeInvalidInput, errors.CodeInvalidInput, "orgID is required")
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := NewSignal(signal.StringValue()); err != nil {
|
if _, err := NewSignal(signal.StringValue()); err != nil {
|
||||||
@ -180,22 +179,23 @@ func NewDefaultQuickFilter(orgID valuer.UUID) ([]*StorableQuickFilter, error) {
|
|||||||
|
|
||||||
tracesJSON, err := json.Marshal(tracesFilters)
|
tracesJSON, err := json.Marshal(tracesFilters)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to marshal traces filters: %w", err)
|
return nil, errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "failed to marshal traces filters")
|
||||||
}
|
}
|
||||||
|
|
||||||
logsJSON, err := json.Marshal(logsFilters)
|
logsJSON, err := json.Marshal(logsFilters)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to marshal logs filters: %w", err)
|
return nil, errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "failed to marshal logs filters")
|
||||||
}
|
}
|
||||||
|
|
||||||
apiMonitoringJSON, err := json.Marshal(apiMonitoringFilters)
|
apiMonitoringJSON, err := json.Marshal(apiMonitoringFilters)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to marshal API monitoring filters: %w", err)
|
return nil, errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "failed to marshal Api Monitoring filters")
|
||||||
}
|
}
|
||||||
exceptionsJSON, err := json.Marshal(exceptionsFilters)
|
exceptionsJSON, err := json.Marshal(exceptionsFilters)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to marshal exceptions filters: %w", err)
|
return nil, errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "failed to marshal Exceptions filters")
|
||||||
}
|
}
|
||||||
|
timeRightNow := time.Now()
|
||||||
|
|
||||||
return []*StorableQuickFilter{
|
return []*StorableQuickFilter{
|
||||||
{
|
{
|
||||||
@ -205,6 +205,10 @@ func NewDefaultQuickFilter(orgID valuer.UUID) ([]*StorableQuickFilter, error) {
|
|||||||
OrgID: orgID,
|
OrgID: orgID,
|
||||||
Filter: string(tracesJSON),
|
Filter: string(tracesJSON),
|
||||||
Signal: SignalTraces,
|
Signal: SignalTraces,
|
||||||
|
TimeAuditable: types.TimeAuditable{
|
||||||
|
CreatedAt: timeRightNow,
|
||||||
|
UpdatedAt: timeRightNow,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Identifiable: types.Identifiable{
|
Identifiable: types.Identifiable{
|
||||||
@ -213,6 +217,10 @@ func NewDefaultQuickFilter(orgID valuer.UUID) ([]*StorableQuickFilter, error) {
|
|||||||
OrgID: orgID,
|
OrgID: orgID,
|
||||||
Filter: string(logsJSON),
|
Filter: string(logsJSON),
|
||||||
Signal: SignalLogs,
|
Signal: SignalLogs,
|
||||||
|
TimeAuditable: types.TimeAuditable{
|
||||||
|
CreatedAt: timeRightNow,
|
||||||
|
UpdatedAt: timeRightNow,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Identifiable: types.Identifiable{
|
Identifiable: types.Identifiable{
|
||||||
@ -221,6 +229,10 @@ func NewDefaultQuickFilter(orgID valuer.UUID) ([]*StorableQuickFilter, error) {
|
|||||||
OrgID: orgID,
|
OrgID: orgID,
|
||||||
Filter: string(apiMonitoringJSON),
|
Filter: string(apiMonitoringJSON),
|
||||||
Signal: SignalApiMonitoring,
|
Signal: SignalApiMonitoring,
|
||||||
|
TimeAuditable: types.TimeAuditable{
|
||||||
|
CreatedAt: timeRightNow,
|
||||||
|
UpdatedAt: timeRightNow,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Identifiable: types.Identifiable{
|
Identifiable: types.Identifiable{
|
||||||
@ -229,6 +241,10 @@ func NewDefaultQuickFilter(orgID valuer.UUID) ([]*StorableQuickFilter, error) {
|
|||||||
OrgID: orgID,
|
OrgID: orgID,
|
||||||
Filter: string(exceptionsJSON),
|
Filter: string(exceptionsJSON),
|
||||||
Signal: SignalExceptions,
|
Signal: SignalExceptions,
|
||||||
|
TimeAuditable: types.TimeAuditable{
|
||||||
|
CreatedAt: timeRightNow,
|
||||||
|
UpdatedAt: timeRightNow,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user