fix(quickfilter): fix injection of quickfilter (#8031)

## 📄 Summary

fix injection of quickfilter
This commit is contained in:
Vibhu Pandey 2025-05-24 22:00:12 +05:30 committed by GitHub
parent b1c78c2f12
commit 93ca3fee33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 58 additions and 85 deletions

View File

@ -17,8 +17,6 @@ import (
"github.com/SigNoz/signoz/pkg/http/middleware" "github.com/SigNoz/signoz/pkg/http/middleware"
"github.com/SigNoz/signoz/pkg/http/render" "github.com/SigNoz/signoz/pkg/http/render"
"github.com/SigNoz/signoz/pkg/licensing" "github.com/SigNoz/signoz/pkg/licensing"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
quickfilterscore "github.com/SigNoz/signoz/pkg/modules/quickfilter/core"
baseapp "github.com/SigNoz/signoz/pkg/query-service/app" baseapp "github.com/SigNoz/signoz/pkg/query-service/app"
"github.com/SigNoz/signoz/pkg/query-service/app/cloudintegrations" "github.com/SigNoz/signoz/pkg/query-service/app/cloudintegrations"
"github.com/SigNoz/signoz/pkg/query-service/app/integrations" "github.com/SigNoz/signoz/pkg/query-service/app/integrations"
@ -59,8 +57,6 @@ type APIHandler struct {
// NewAPIHandler returns an APIHandler // NewAPIHandler returns an APIHandler
func NewAPIHandler(opts APIHandlerOptions, signoz *signoz.SigNoz) (*APIHandler, error) { func NewAPIHandler(opts APIHandlerOptions, signoz *signoz.SigNoz) (*APIHandler, error) {
quickfiltermodule := quickfilterscore.NewQuickFilters(quickfilterscore.NewStore(signoz.SQLStore))
quickFilter := quickfilter.NewAPI(quickfiltermodule)
baseHandler, err := baseapp.NewAPIHandler(baseapp.APIHandlerOpts{ baseHandler, err := baseapp.NewAPIHandler(baseapp.APIHandlerOpts{
Reader: opts.DataConnector, Reader: opts.DataConnector,
PreferSpanMetrics: opts.PreferSpanMetrics, PreferSpanMetrics: opts.PreferSpanMetrics,
@ -73,8 +69,6 @@ func NewAPIHandler(opts APIHandlerOptions, signoz *signoz.SigNoz) (*APIHandler,
LicensingAPI: httplicensing.NewLicensingAPI(signoz.Licensing), LicensingAPI: httplicensing.NewLicensingAPI(signoz.Licensing),
FieldsAPI: fields.NewAPI(signoz.TelemetryStore), FieldsAPI: fields.NewAPI(signoz.TelemetryStore),
Signoz: signoz, Signoz: signoz,
QuickFilters: quickFilter,
QuickFilterModule: quickfiltermodule,
}) })
if err != nil { if err != nil {

View File

@ -1,37 +1,33 @@
package quickfilter package implquickfilter
import ( import (
"encoding/json" "encoding/json"
"net/http"
"github.com/SigNoz/signoz/pkg/http/render" "github.com/SigNoz/signoz/pkg/http/render"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
"github.com/SigNoz/signoz/pkg/types/authtypes" "github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/types/quickfiltertypes" "github.com/SigNoz/signoz/pkg/types/quickfiltertypes"
"github.com/SigNoz/signoz/pkg/valuer" "github.com/SigNoz/signoz/pkg/valuer"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"net/http"
) )
type API interface { type handler struct {
GetQuickFilters(http.ResponseWriter, *http.Request) module quickfilter.Module
UpdateQuickFilters(http.ResponseWriter, *http.Request)
GetSignalFilters(http.ResponseWriter, *http.Request)
} }
type quickFiltersAPI struct { func NewHandler(module quickfilter.Module) quickfilter.Handler {
usecase Usecase return &handler{module: module}
} }
func NewAPI(usecase Usecase) API { func (handler *handler) GetQuickFilters(rw http.ResponseWriter, r *http.Request) {
return &quickFiltersAPI{usecase: usecase}
}
func (q *quickFiltersAPI) GetQuickFilters(rw http.ResponseWriter, r *http.Request) {
claims, err := authtypes.ClaimsFromContext(r.Context()) claims, err := authtypes.ClaimsFromContext(r.Context())
if err != nil { if err != nil {
render.Error(rw, err) render.Error(rw, err)
return return
} }
filters, err := q.usecase.GetQuickFilters(r.Context(), valuer.MustNewUUID(claims.OrgID)) filters, err := handler.module.GetQuickFilters(r.Context(), valuer.MustNewUUID(claims.OrgID))
if err != nil { if err != nil {
render.Error(rw, err) render.Error(rw, err)
return return
@ -40,7 +36,7 @@ func (q *quickFiltersAPI) GetQuickFilters(rw http.ResponseWriter, r *http.Reques
render.Success(rw, http.StatusOK, filters) render.Success(rw, http.StatusOK, filters)
} }
func (q *quickFiltersAPI) UpdateQuickFilters(rw http.ResponseWriter, r *http.Request) { func (handler *handler) UpdateQuickFilters(rw http.ResponseWriter, r *http.Request) {
claims, err := authtypes.ClaimsFromContext(r.Context()) claims, err := authtypes.ClaimsFromContext(r.Context())
if err != nil { if err != nil {
render.Error(rw, err) render.Error(rw, err)
@ -54,7 +50,7 @@ func (q *quickFiltersAPI) UpdateQuickFilters(rw http.ResponseWriter, r *http.Req
return return
} }
err = q.usecase.UpdateQuickFilters(r.Context(), valuer.MustNewUUID(claims.OrgID), req.Signal, req.Filters) err = handler.module.UpdateQuickFilters(r.Context(), valuer.MustNewUUID(claims.OrgID), req.Signal, req.Filters)
if err != nil { if err != nil {
render.Error(rw, err) render.Error(rw, err)
return return
@ -63,7 +59,7 @@ func (q *quickFiltersAPI) UpdateQuickFilters(rw http.ResponseWriter, r *http.Req
render.Success(rw, http.StatusNoContent, nil) render.Success(rw, http.StatusNoContent, nil)
} }
func (q *quickFiltersAPI) GetSignalFilters(rw http.ResponseWriter, r *http.Request) { func (handler *handler) GetSignalFilters(rw http.ResponseWriter, r *http.Request) {
claims, err := authtypes.ClaimsFromContext(r.Context()) claims, err := authtypes.ClaimsFromContext(r.Context())
if err != nil { if err != nil {
render.Error(rw, err) render.Error(rw, err)
@ -77,7 +73,7 @@ func (q *quickFiltersAPI) GetSignalFilters(rw http.ResponseWriter, r *http.Reque
return return
} }
filters, err := q.usecase.GetSignalFilters(r.Context(), valuer.MustNewUUID(claims.OrgID), validatedSignal) filters, err := handler.module.GetSignalFilters(r.Context(), valuer.MustNewUUID(claims.OrgID), validatedSignal)
if err != nil { if err != nil {
render.Error(rw, err) render.Error(rw, err)
return return

View File

@ -1,9 +1,9 @@
package core package implquickfilter
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"fmt"
"github.com/SigNoz/signoz/pkg/errors" "github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/modules/quickfilter" "github.com/SigNoz/signoz/pkg/modules/quickfilter"
v3 "github.com/SigNoz/signoz/pkg/query-service/model/v3" v3 "github.com/SigNoz/signoz/pkg/query-service/model/v3"
@ -11,18 +11,17 @@ import (
"github.com/SigNoz/signoz/pkg/valuer" "github.com/SigNoz/signoz/pkg/valuer"
) )
type usecase struct { type module struct {
store quickfiltertypes.QuickFilterStore store quickfiltertypes.QuickFilterStore
} }
// NewQuickFilters creates a new quick filters usecase func NewModule(store quickfiltertypes.QuickFilterStore) quickfilter.Module {
func NewQuickFilters(store quickfiltertypes.QuickFilterStore) quickfilter.Usecase { return &module{store: store}
return &usecase{store: store}
} }
// GetQuickFilters returns all quick filters for an organization // GetQuickFilters returns all quick filters for an organization
func (u *usecase) GetQuickFilters(ctx context.Context, orgID valuer.UUID) ([]*quickfiltertypes.SignalFilters, error) { func (module *module) GetQuickFilters(ctx context.Context, orgID valuer.UUID) ([]*quickfiltertypes.SignalFilters, error) {
storedFilters, err := u.store.Get(ctx, orgID) storedFilters, err := module.store.Get(ctx, orgID)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "error fetching organization filters") return nil, errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "error fetching organization filters")
} }
@ -40,8 +39,8 @@ func (u *usecase) GetQuickFilters(ctx context.Context, orgID valuer.UUID) ([]*qu
} }
// GetSignalFilters returns quick filters for a specific signal in an organization // GetSignalFilters returns quick filters for a specific signal in an organization
func (u *usecase) GetSignalFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal) (*quickfiltertypes.SignalFilters, error) { func (m *module) GetSignalFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal) (*quickfiltertypes.SignalFilters, error) {
storedFilter, err := u.store.GetBySignal(ctx, orgID, signal.StringValue()) storedFilter, err := m.store.GetBySignal(ctx, orgID, signal.StringValue())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -64,7 +63,7 @@ func (u *usecase) GetSignalFilters(ctx context.Context, orgID valuer.UUID, signa
} }
// UpdateQuickFilters updates quick filters for a specific signal in an organization // UpdateQuickFilters updates quick filters for a specific signal in an organization
func (u *usecase) UpdateQuickFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal, filters []v3.AttributeKey) error { func (module *module) UpdateQuickFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal, filters []v3.AttributeKey) error {
// Validate each filter // Validate each filter
for _, filter := range filters { for _, filter := range filters {
if err := filter.Validate(); err != nil { if err := filter.Validate(); err != nil {
@ -79,7 +78,7 @@ func (u *usecase) UpdateQuickFilters(ctx context.Context, orgID valuer.UUID, sig
} }
// Check if filter exists // Check if filter exists
existingFilter, err := u.store.GetBySignal(ctx, orgID, signal.StringValue()) existingFilter, err := module.store.GetBySignal(ctx, orgID, signal.StringValue())
if err != nil { if err != nil {
return errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "error checking existing filters") return errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "error checking existing filters")
} }
@ -100,17 +99,18 @@ func (u *usecase) UpdateQuickFilters(ctx context.Context, orgID valuer.UUID, sig
} }
// Persist filter // Persist filter
if err := u.store.Upsert(ctx, filter); err != nil { if err := module.store.Upsert(ctx, filter); err != nil {
return errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, fmt.Sprintf("error upserting filter for signal: %s", signal.StringValue())) return err
} }
return nil return nil
} }
func (u *usecase) SetDefaultConfig(ctx context.Context, orgID valuer.UUID) error { func (module *module) SetDefaultConfig(ctx context.Context, orgID valuer.UUID) error {
storableQuickFilters, err := quickfiltertypes.NewDefaultQuickFilter(orgID) storableQuickFilters, err := quickfiltertypes.NewDefaultQuickFilter(orgID)
if err != nil { if err != nil {
return errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "error creating default quick filters") return err
} }
return u.store.Create(ctx, storableQuickFilters)
return module.store.Create(ctx, storableQuickFilters)
} }

View File

@ -1,8 +1,9 @@
package core package implquickfilter
import ( import (
"context" "context"
"database/sql" "database/sql"
"github.com/SigNoz/signoz/pkg/errors" "github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/sqlstore" "github.com/SigNoz/signoz/pkg/sqlstore"
"github.com/SigNoz/signoz/pkg/types/quickfiltertypes" "github.com/SigNoz/signoz/pkg/types/quickfiltertypes"

View File

@ -2,14 +2,22 @@ package quickfilter
import ( import (
"context" "context"
"net/http"
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/quickfiltertypes" "github.com/SigNoz/signoz/pkg/types/quickfiltertypes"
"github.com/SigNoz/signoz/pkg/valuer" "github.com/SigNoz/signoz/pkg/valuer"
) )
type Usecase interface { type Module interface {
GetQuickFilters(ctx context.Context, orgID valuer.UUID) ([]*quickfiltertypes.SignalFilters, error) GetQuickFilters(ctx context.Context, orgID valuer.UUID) ([]*quickfiltertypes.SignalFilters, error)
UpdateQuickFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal, filters []v3.AttributeKey) error UpdateQuickFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal, filters []v3.AttributeKey) error
GetSignalFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal) (*quickfiltertypes.SignalFilters, error) GetSignalFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal) (*quickfiltertypes.SignalFilters, error)
SetDefaultConfig(ctx context.Context, orgID valuer.UUID) error SetDefaultConfig(ctx context.Context, orgID valuer.UUID) error
} }
type Handler interface {
GetQuickFilters(http.ResponseWriter, *http.Request)
UpdateQuickFilters(http.ResponseWriter, *http.Request)
GetSignalFilters(http.ResponseWriter, *http.Request)
}

View File

@ -24,7 +24,6 @@ import (
"github.com/SigNoz/signoz/pkg/http/middleware" "github.com/SigNoz/signoz/pkg/http/middleware"
"github.com/SigNoz/signoz/pkg/http/render" "github.com/SigNoz/signoz/pkg/http/render"
"github.com/SigNoz/signoz/pkg/licensing" "github.com/SigNoz/signoz/pkg/licensing"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
"github.com/SigNoz/signoz/pkg/query-service/app/cloudintegrations/services" "github.com/SigNoz/signoz/pkg/query-service/app/cloudintegrations/services"
"github.com/SigNoz/signoz/pkg/query-service/app/integrations" "github.com/SigNoz/signoz/pkg/query-service/app/integrations"
"github.com/SigNoz/signoz/pkg/query-service/app/metricsexplorer" "github.com/SigNoz/signoz/pkg/query-service/app/metricsexplorer"
@ -142,10 +141,6 @@ type APIHandler struct {
FieldsAPI *fields.API FieldsAPI *fields.API
Signoz *signoz.SigNoz Signoz *signoz.SigNoz
QuickFilters quickfilter.API
QuickFilterModule quickfilter.Usecase
} }
type APIHandlerOpts struct { type APIHandlerOpts struct {
@ -182,10 +177,6 @@ type APIHandlerOpts struct {
FieldsAPI *fields.API FieldsAPI *fields.API
Signoz *signoz.SigNoz Signoz *signoz.SigNoz
QuickFilters quickfilter.API
QuickFilterModule quickfilter.Usecase
} }
// NewAPIHandler returns an APIHandler // NewAPIHandler returns an APIHandler
@ -248,8 +239,6 @@ func NewAPIHandler(opts APIHandlerOpts) (*APIHandler, error) {
LicensingAPI: opts.LicensingAPI, LicensingAPI: opts.LicensingAPI,
Signoz: opts.Signoz, Signoz: opts.Signoz,
FieldsAPI: opts.FieldsAPI, FieldsAPI: opts.FieldsAPI,
QuickFilters: opts.QuickFilters,
QuickFilterModule: opts.QuickFilterModule,
} }
logsQueryBuilder := logsv4.PrepareLogsQuery logsQueryBuilder := logsv4.PrepareLogsQuery
@ -576,9 +565,9 @@ func (aH *APIHandler) RegisterRoutes(router *mux.Router, am *middleware.AuthZ) {
router.HandleFunc("/api/v1/org/preferences/{preferenceId}", am.AdminAccess(aH.Signoz.Handlers.Preference.UpdateOrg)).Methods(http.MethodPut) router.HandleFunc("/api/v1/org/preferences/{preferenceId}", am.AdminAccess(aH.Signoz.Handlers.Preference.UpdateOrg)).Methods(http.MethodPut)
// Quick Filters // Quick Filters
router.HandleFunc("/api/v1/orgs/me/filters", am.ViewAccess(aH.QuickFilters.GetQuickFilters)).Methods(http.MethodGet) router.HandleFunc("/api/v1/orgs/me/filters", am.ViewAccess(aH.Signoz.Handlers.QuickFilter.GetQuickFilters)).Methods(http.MethodGet)
router.HandleFunc("/api/v1/orgs/me/filters/{signal}", am.ViewAccess(aH.QuickFilters.GetSignalFilters)).Methods(http.MethodGet) router.HandleFunc("/api/v1/orgs/me/filters/{signal}", am.ViewAccess(aH.Signoz.Handlers.QuickFilter.GetSignalFilters)).Methods(http.MethodGet)
router.HandleFunc("/api/v1/orgs/me/filters", am.AdminAccess(aH.QuickFilters.UpdateQuickFilters)).Methods(http.MethodPut) router.HandleFunc("/api/v1/orgs/me/filters", am.AdminAccess(aH.Signoz.Handlers.QuickFilter.UpdateQuickFilters)).Methods(http.MethodPut)
// === Authentication APIs === // === Authentication APIs ===
router.HandleFunc("/api/v1/invite", am.AdminAccess(aH.Signoz.Handlers.User.CreateInvite)).Methods(http.MethodPost) router.HandleFunc("/api/v1/invite", am.AdminAccess(aH.Signoz.Handlers.User.CreateInvite)).Methods(http.MethodPost)
@ -2029,7 +2018,7 @@ func (aH *APIHandler) registerUser(w http.ResponseWriter, r *http.Request) {
return return
} }
_, apiErr := auth.Register(context.Background(), &req, aH.Signoz.Alertmanager, aH.Signoz.Modules.Organization, aH.Signoz.Modules.User, aH.QuickFilterModule) _, apiErr := auth.Register(context.Background(), &req, aH.Signoz.Alertmanager, aH.Signoz.Modules.Organization, aH.Signoz.Modules.User, aH.Signoz.Modules.QuickFilter)
if apiErr != nil { if apiErr != nil {
RespondError(w, apiErr, nil) RespondError(w, apiErr, nil)
return return

View File

@ -15,8 +15,6 @@ import (
"github.com/SigNoz/signoz/pkg/apis/fields" "github.com/SigNoz/signoz/pkg/apis/fields"
"github.com/SigNoz/signoz/pkg/http/middleware" "github.com/SigNoz/signoz/pkg/http/middleware"
"github.com/SigNoz/signoz/pkg/licensing/nooplicensing" "github.com/SigNoz/signoz/pkg/licensing/nooplicensing"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
quickfilterscore "github.com/SigNoz/signoz/pkg/modules/quickfilter/core"
"github.com/SigNoz/signoz/pkg/prometheus" "github.com/SigNoz/signoz/pkg/prometheus"
"github.com/SigNoz/signoz/pkg/query-service/agentConf" "github.com/SigNoz/signoz/pkg/query-service/agentConf"
"github.com/SigNoz/signoz/pkg/query-service/app/clickhouseReader" "github.com/SigNoz/signoz/pkg/query-service/app/clickhouseReader"
@ -138,8 +136,6 @@ func NewServer(serverOptions *ServerOptions) (*Server, error) {
telemetry.GetInstance().SetUserCountCallback(telemetry.GetUserCount) telemetry.GetInstance().SetUserCountCallback(telemetry.GetUserCount)
telemetry.GetInstance().SetDashboardsInfoCallback(telemetry.GetDashboardsInfo) telemetry.GetInstance().SetDashboardsInfoCallback(telemetry.GetDashboardsInfo)
quickfiltermodule := quickfilterscore.NewQuickFilters(quickfilterscore.NewStore(serverOptions.SigNoz.SQLStore))
quickFilter := quickfilter.NewAPI(quickfiltermodule)
apiHandler, err := NewAPIHandler(APIHandlerOpts{ apiHandler, err := NewAPIHandler(APIHandlerOpts{
Reader: reader, Reader: reader,
PreferSpanMetrics: serverOptions.PreferSpanMetrics, PreferSpanMetrics: serverOptions.PreferSpanMetrics,
@ -153,8 +149,6 @@ func NewServer(serverOptions *ServerOptions) (*Server, error) {
LicensingAPI: nooplicensing.NewLicenseAPI(), LicensingAPI: nooplicensing.NewLicenseAPI(),
FieldsAPI: fields.NewAPI(serverOptions.SigNoz.TelemetryStore), FieldsAPI: fields.NewAPI(serverOptions.SigNoz.TelemetryStore),
Signoz: serverOptions.SigNoz, Signoz: serverOptions.SigNoz,
QuickFilters: quickFilter,
QuickFilterModule: quickfiltermodule,
}) })
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -47,7 +47,7 @@ func RegisterOrgAndFirstUser(ctx context.Context, req *types.PostableRegisterOrg
} }
// First user registration // First user registration
func Register(ctx context.Context, req *types.PostableRegisterOrgAndAdmin, alertmanager alertmanager.Alertmanager, organizationModule organization.Module, userModule user.Module, quickfiltermodule quickfilter.Usecase) (*types.User, *model.ApiError) { func Register(ctx context.Context, req *types.PostableRegisterOrgAndAdmin, alertmanager alertmanager.Alertmanager, organizationModule organization.Module, userModule user.Module, quickfiltermodule quickfilter.Module) (*types.User, *model.ApiError) {
user, err := RegisterOrgAndFirstUser(ctx, req, organizationModule, userModule) user, err := RegisterOrgAndFirstUser(ctx, req, organizationModule, userModule)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -13,8 +13,6 @@ import (
"github.com/SigNoz/signoz/pkg/emailing" "github.com/SigNoz/signoz/pkg/emailing"
"github.com/SigNoz/signoz/pkg/emailing/noopemailing" "github.com/SigNoz/signoz/pkg/emailing/noopemailing"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
quickfilterscore "github.com/SigNoz/signoz/pkg/modules/quickfilter/core"
"github.com/SigNoz/signoz/pkg/types/authtypes" "github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/http/middleware" "github.com/SigNoz/signoz/pkg/http/middleware"
@ -312,7 +310,6 @@ func NewFilterSuggestionsTestBed(t *testing.T) *FilterSuggestionsTestBed {
userModule := impluser.NewModule(impluser.NewStore(testDB), jwt, emailing, providerSettings) userModule := impluser.NewModule(impluser.NewStore(testDB), jwt, emailing, providerSettings)
userHandler := impluser.NewHandler(userModule) userHandler := impluser.NewHandler(userModule)
modules := signoz.NewModules(testDB, userModule) modules := signoz.NewModules(testDB, userModule)
quickFilterModule := quickfilter.NewAPI(quickfilterscore.NewQuickFilters(quickfilterscore.NewStore(testDB)))
apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{ apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{
Reader: reader, Reader: reader,
@ -321,7 +318,6 @@ func NewFilterSuggestionsTestBed(t *testing.T) *FilterSuggestionsTestBed {
Modules: modules, Modules: modules,
Handlers: signoz.NewHandlers(modules, userHandler), Handlers: signoz.NewHandlers(modules, userHandler),
}, },
QuickFilters: quickFilterModule,
}) })
if err != nil { if err != nil {
t.Fatalf("could not create a new ApiHandler: %v", err) t.Fatalf("could not create a new ApiHandler: %v", err)

View File

@ -15,8 +15,6 @@ import (
"github.com/SigNoz/signoz/pkg/emailing/noopemailing" "github.com/SigNoz/signoz/pkg/emailing/noopemailing"
"github.com/SigNoz/signoz/pkg/instrumentation/instrumentationtest" "github.com/SigNoz/signoz/pkg/instrumentation/instrumentationtest"
"github.com/SigNoz/signoz/pkg/modules/organization/implorganization" "github.com/SigNoz/signoz/pkg/modules/organization/implorganization"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
quickfilterscore "github.com/SigNoz/signoz/pkg/modules/quickfilter/core"
"github.com/SigNoz/signoz/pkg/modules/user" "github.com/SigNoz/signoz/pkg/modules/user"
"github.com/SigNoz/signoz/pkg/modules/user/impluser" "github.com/SigNoz/signoz/pkg/modules/user/impluser"
"github.com/SigNoz/signoz/pkg/query-service/agentConf" "github.com/SigNoz/signoz/pkg/query-service/agentConf"
@ -489,7 +487,6 @@ func NewTestbedWithoutOpamp(t *testing.T, sqlStore sqlstore.SQLStore) *LogPipeli
userHandler := impluser.NewHandler(userModule) userHandler := impluser.NewHandler(userModule)
modules := signoz.NewModules(sqlStore, userModule) modules := signoz.NewModules(sqlStore, userModule)
handlers := signoz.NewHandlers(modules, userHandler) handlers := signoz.NewHandlers(modules, userHandler)
quickFilterModule := quickfilter.NewAPI(quickfilterscore.NewQuickFilters(quickfilterscore.NewStore(sqlStore)))
apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{ apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{
LogsParsingPipelineController: controller, LogsParsingPipelineController: controller,
@ -498,7 +495,6 @@ func NewTestbedWithoutOpamp(t *testing.T, sqlStore sqlstore.SQLStore) *LogPipeli
Modules: modules, Modules: modules,
Handlers: handlers, Handlers: handlers,
}, },
QuickFilters: quickFilterModule,
}) })
if err != nil { if err != nil {
t.Fatalf("could not create a new ApiHandler: %v", err) t.Fatalf("could not create a new ApiHandler: %v", err)

View File

@ -11,8 +11,6 @@ import (
"github.com/SigNoz/signoz/pkg/emailing" "github.com/SigNoz/signoz/pkg/emailing"
"github.com/SigNoz/signoz/pkg/emailing/noopemailing" "github.com/SigNoz/signoz/pkg/emailing/noopemailing"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
quickfilterscore "github.com/SigNoz/signoz/pkg/modules/quickfilter/core"
"github.com/SigNoz/signoz/pkg/types/authtypes" "github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/http/middleware" "github.com/SigNoz/signoz/pkg/http/middleware"
@ -375,7 +373,6 @@ func NewCloudIntegrationsTestBed(t *testing.T, testDB sqlstore.SQLStore) *CloudI
userHandler := impluser.NewHandler(userModule) userHandler := impluser.NewHandler(userModule)
modules := signoz.NewModules(testDB, userModule) modules := signoz.NewModules(testDB, userModule)
handlers := signoz.NewHandlers(modules, userHandler) handlers := signoz.NewHandlers(modules, userHandler)
quickFilterModule := quickfilter.NewAPI(quickfilterscore.NewQuickFilters(quickfilterscore.NewStore(testDB)))
apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{ apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{
Reader: reader, Reader: reader,
@ -385,7 +382,6 @@ func NewCloudIntegrationsTestBed(t *testing.T, testDB sqlstore.SQLStore) *CloudI
Modules: modules, Modules: modules,
Handlers: handlers, Handlers: handlers,
}, },
QuickFilters: quickFilterModule,
}) })
if err != nil { if err != nil {
t.Fatalf("could not create a new ApiHandler: %v", err) t.Fatalf("could not create a new ApiHandler: %v", err)

View File

@ -11,8 +11,6 @@ import (
"github.com/SigNoz/signoz/pkg/emailing" "github.com/SigNoz/signoz/pkg/emailing"
"github.com/SigNoz/signoz/pkg/emailing/noopemailing" "github.com/SigNoz/signoz/pkg/emailing/noopemailing"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
quickfilterscore "github.com/SigNoz/signoz/pkg/modules/quickfilter/core"
"github.com/SigNoz/signoz/pkg/http/middleware" "github.com/SigNoz/signoz/pkg/http/middleware"
"github.com/SigNoz/signoz/pkg/instrumentation/instrumentationtest" "github.com/SigNoz/signoz/pkg/instrumentation/instrumentationtest"
@ -581,9 +579,6 @@ func NewIntegrationsTestBed(t *testing.T, testDB sqlstore.SQLStore) *Integration
userHandler := impluser.NewHandler(userModule) userHandler := impluser.NewHandler(userModule)
modules := signoz.NewModules(testDB, userModule) modules := signoz.NewModules(testDB, userModule)
handlers := signoz.NewHandlers(modules, userHandler) handlers := signoz.NewHandlers(modules, userHandler)
quickFilterModule := quickfilter.NewAPI(quickfilterscore.NewQuickFilters(quickfilterscore.NewStore(testDB)))
apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{ apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{
Reader: reader, Reader: reader,
IntegrationsController: controller, IntegrationsController: controller,
@ -594,7 +589,6 @@ func NewIntegrationsTestBed(t *testing.T, testDB sqlstore.SQLStore) *Integration
Modules: modules, Modules: modules,
Handlers: handlers, Handlers: handlers,
}, },
QuickFilters: quickFilterModule,
}) })
if err != nil { if err != nil {
t.Fatalf("could not create a new ApiHandler: %v", err) t.Fatalf("could not create a new ApiHandler: %v", err)

View File

@ -9,6 +9,8 @@ import (
"github.com/SigNoz/signoz/pkg/modules/organization/implorganization" "github.com/SigNoz/signoz/pkg/modules/organization/implorganization"
"github.com/SigNoz/signoz/pkg/modules/preference" "github.com/SigNoz/signoz/pkg/modules/preference"
"github.com/SigNoz/signoz/pkg/modules/preference/implpreference" "github.com/SigNoz/signoz/pkg/modules/preference/implpreference"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
"github.com/SigNoz/signoz/pkg/modules/quickfilter/implquickfilter"
"github.com/SigNoz/signoz/pkg/modules/savedview" "github.com/SigNoz/signoz/pkg/modules/savedview"
"github.com/SigNoz/signoz/pkg/modules/savedview/implsavedview" "github.com/SigNoz/signoz/pkg/modules/savedview/implsavedview"
"github.com/SigNoz/signoz/pkg/modules/user" "github.com/SigNoz/signoz/pkg/modules/user"
@ -21,6 +23,7 @@ type Handlers struct {
SavedView savedview.Handler SavedView savedview.Handler
Apdex apdex.Handler Apdex apdex.Handler
Dashboard dashboard.Handler Dashboard dashboard.Handler
QuickFilter quickfilter.Handler
} }
func NewHandlers(modules Modules, user user.Handler) Handlers { func NewHandlers(modules Modules, user user.Handler) Handlers {
@ -31,5 +34,6 @@ func NewHandlers(modules Modules, user user.Handler) Handlers {
SavedView: implsavedview.NewHandler(modules.SavedView), SavedView: implsavedview.NewHandler(modules.SavedView),
Apdex: implapdex.NewHandler(modules.Apdex), Apdex: implapdex.NewHandler(modules.Apdex),
Dashboard: impldashboard.NewHandler(modules.Dashboard), Dashboard: impldashboard.NewHandler(modules.Dashboard),
QuickFilter: implquickfilter.NewHandler(modules.QuickFilter),
} }
} }

View File

@ -9,6 +9,8 @@ import (
"github.com/SigNoz/signoz/pkg/modules/organization/implorganization" "github.com/SigNoz/signoz/pkg/modules/organization/implorganization"
"github.com/SigNoz/signoz/pkg/modules/preference" "github.com/SigNoz/signoz/pkg/modules/preference"
"github.com/SigNoz/signoz/pkg/modules/preference/implpreference" "github.com/SigNoz/signoz/pkg/modules/preference/implpreference"
"github.com/SigNoz/signoz/pkg/modules/quickfilter"
"github.com/SigNoz/signoz/pkg/modules/quickfilter/implquickfilter"
"github.com/SigNoz/signoz/pkg/modules/savedview" "github.com/SigNoz/signoz/pkg/modules/savedview"
"github.com/SigNoz/signoz/pkg/modules/savedview/implsavedview" "github.com/SigNoz/signoz/pkg/modules/savedview/implsavedview"
"github.com/SigNoz/signoz/pkg/modules/user" "github.com/SigNoz/signoz/pkg/modules/user"
@ -23,6 +25,7 @@ type Modules struct {
SavedView savedview.Module SavedView savedview.Module
Apdex apdex.Module Apdex apdex.Module
Dashboard dashboard.Module Dashboard dashboard.Module
QuickFilter quickfilter.Module
} }
func NewModules(sqlstore sqlstore.SQLStore, user user.Module) Modules { func NewModules(sqlstore sqlstore.SQLStore, user user.Module) Modules {
@ -33,5 +36,6 @@ func NewModules(sqlstore sqlstore.SQLStore, user user.Module) Modules {
SavedView: implsavedview.NewModule(sqlstore), SavedView: implsavedview.NewModule(sqlstore),
Apdex: implapdex.NewModule(sqlstore), Apdex: implapdex.NewModule(sqlstore),
Dashboard: impldashboard.NewModule(sqlstore), Dashboard: impldashboard.NewModule(sqlstore),
QuickFilter: implquickfilter.NewModule(implquickfilter.NewStore(sqlstore)),
} }
} }

View File

@ -2,12 +2,13 @@ package quickfiltertypes
import ( import (
"encoding/json" "encoding/json"
"time"
"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"
"github.com/SigNoz/signoz/pkg/valuer" "github.com/SigNoz/signoz/pkg/valuer"
"github.com/uptrace/bun" "github.com/uptrace/bun"
"time"
) )
type Signal struct { type Signal struct {
@ -48,7 +49,7 @@ func NewSignal(s string) (Signal, error) {
case "exceptions": case "exceptions":
return SignalExceptions, nil return SignalExceptions, nil
default: default:
return Signal{}, errors.Newf(errors.TypeInternal, errors.CodeInternal, "invalid signal: "+s) return Signal{}, errors.Newf(errors.TypeInvalidInput, errors.CodeInvalidInput, "invalid signal: %s", s)
} }
} }