diff --git a/ee/query-service/app/server.go b/ee/query-service/app/server.go index cda311ec34..2b4d3754c6 100644 --- a/ee/query-service/app/server.go +++ b/ee/query-service/app/server.go @@ -298,6 +298,7 @@ func (s *Server) createPublicServer(apiHandler *api.APIHandler, web web.Web) (*h apiHandler.RegisterMessagingQueuesRoutes(r, am) apiHandler.RegisterThirdPartyApiRoutes(r, am) apiHandler.MetricExplorerRoutes(r, am) + apiHandler.RegisterTraceFunnelsRoutes(r, am) c := cors.New(cors.Options{ AllowedOrigins: []string{"*"}, diff --git a/pkg/query-service/app/http_handler.go b/pkg/query-service/app/http_handler.go index 3712fdfc1d..204b1ed684 100644 --- a/pkg/query-service/app/http_handler.go +++ b/pkg/query-service/app/http_handler.go @@ -5229,3 +5229,33 @@ func (aH *APIHandler) getDomainInfo(w http.ResponseWriter, r *http.Request) { } aH.Respond(w, resp) } + +// RegisterTraceFunnelsRoutes adds trace funnels routes +func (aH *APIHandler) RegisterTraceFunnelsRoutes(router *mux.Router, am *middleware.AuthZ) { + // Main trace funnels router + traceFunnelsRouter := router.PathPrefix("/api/v1/trace-funnels").Subrouter() + + // API endpoints + traceFunnelsRouter.HandleFunc("/new", + am.ViewAccess(aH.Signoz.Handlers.TraceFunnel.New)). + Methods(http.MethodPost) + traceFunnelsRouter.HandleFunc("/list", + am.ViewAccess(aH.Signoz.Handlers.TraceFunnel.List)). + Methods(http.MethodGet) + traceFunnelsRouter.HandleFunc("/steps/update", + am.ViewAccess(aH.Signoz.Handlers.TraceFunnel.UpdateSteps)). + Methods(http.MethodPut) + + traceFunnelsRouter.HandleFunc("/{funnel_id}", + am.ViewAccess(aH.Signoz.Handlers.TraceFunnel.Get)). + Methods(http.MethodGet) + traceFunnelsRouter.HandleFunc("/{funnel_id}", + am.ViewAccess(aH.Signoz.Handlers.TraceFunnel.Delete)). + Methods(http.MethodDelete) + traceFunnelsRouter.HandleFunc("/{funnel_id}", + am.ViewAccess(aH.Signoz.Handlers.TraceFunnel.UpdateFunnel)). + Methods(http.MethodPut) + traceFunnelsRouter.HandleFunc("/save", + am.ViewAccess(aH.Signoz.Handlers.TraceFunnel.Save)). + Methods(http.MethodPost) +} diff --git a/pkg/query-service/app/server.go b/pkg/query-service/app/server.go index 3f25901a81..3074328f5e 100644 --- a/pkg/query-service/app/server.go +++ b/pkg/query-service/app/server.go @@ -269,6 +269,7 @@ func (s *Server) createPublicServer(api *APIHandler, web web.Web) (*http.Server, api.RegisterMessagingQueuesRoutes(r, am) api.RegisterThirdPartyApiRoutes(r, am) api.MetricExplorerRoutes(r, am) + api.RegisterTraceFunnelsRoutes(r, am) c := cors.New(cors.Options{ AllowedOrigins: []string{"*"}, diff --git a/pkg/signoz/handler.go b/pkg/signoz/handler.go index f0d1528ec1..2cf4c1a299 100644 --- a/pkg/signoz/handler.go +++ b/pkg/signoz/handler.go @@ -15,6 +15,8 @@ import ( "github.com/SigNoz/signoz/pkg/modules/savedview/implsavedview" "github.com/SigNoz/signoz/pkg/modules/user" "github.com/SigNoz/signoz/pkg/modules/user/impluser" + "github.com/SigNoz/signoz/pkg/modules/tracefunnel" + "github.com/SigNoz/signoz/pkg/modules/tracefunnel/impltracefunnel" ) type Handlers struct { @@ -25,6 +27,7 @@ type Handlers struct { Apdex apdex.Handler Dashboard dashboard.Handler QuickFilter quickfilter.Handler + TraceFunnel tracefunnel.Handler } func NewHandlers(modules Modules) Handlers { @@ -36,5 +39,6 @@ func NewHandlers(modules Modules) Handlers { Apdex: implapdex.NewHandler(modules.Apdex), Dashboard: impldashboard.NewHandler(modules.Dashboard), QuickFilter: implquickfilter.NewHandler(modules.QuickFilter), + TraceFunnel: impltracefunnel.NewHandler(modules.TraceFunnel), } } diff --git a/pkg/signoz/module.go b/pkg/signoz/module.go index c4f45e8492..b4e6704de2 100644 --- a/pkg/signoz/module.go +++ b/pkg/signoz/module.go @@ -18,6 +18,8 @@ import ( "github.com/SigNoz/signoz/pkg/modules/savedview/implsavedview" "github.com/SigNoz/signoz/pkg/modules/user" "github.com/SigNoz/signoz/pkg/modules/user/impluser" + "github.com/SigNoz/signoz/pkg/modules/tracefunnel" + "github.com/SigNoz/signoz/pkg/modules/tracefunnel/impltracefunnel" "github.com/SigNoz/signoz/pkg/sqlstore" "github.com/SigNoz/signoz/pkg/types/authtypes" "github.com/SigNoz/signoz/pkg/types/preferencetypes" @@ -32,6 +34,7 @@ type Modules struct { Apdex apdex.Module Dashboard dashboard.Module QuickFilter quickfilter.Module + TraceFunnel tracefunnel.Module } func NewModules( @@ -54,5 +57,6 @@ func NewModules( Dashboard: impldashboard.NewModule(sqlstore), User: user, QuickFilter: quickfilter, + TraceFunnel: impltracefunnel.NewModule(impltracefunnel.NewStore(sqlstore)), } } diff --git a/pkg/signoz/provider.go b/pkg/signoz/provider.go index bfbcdeafe1..6076890333 100644 --- a/pkg/signoz/provider.go +++ b/pkg/signoz/provider.go @@ -88,6 +88,7 @@ func NewSQLMigrationProviderFactories(sqlstore sqlstore.SQLStore) factory.NamedM sqlmigration.NewMigratePATToFactorAPIKey(sqlstore), sqlmigration.NewUpdateApiMonitoringFiltersFactory(sqlstore), sqlmigration.NewAddKeyOrganizationFactory(sqlstore), + sqlmigration.NewAddTraceFunnelsFactory(sqlstore), ) }