@@ -20,6 +20,7 @@ package api
2020import (
2121 "net/http"
2222
23+ "github.com/elastic/beats/v7/libbeat/beat"
2324 "github.com/elastic/beats/v7/libbeat/logp"
2425 "github.com/elastic/beats/v7/libbeat/monitoring"
2526
@@ -63,13 +64,8 @@ const (
6364 IntakeRUMV3Path = "/intake/v3/rum/events"
6465)
6566
66- type route struct {
67- path string
68- handlerFn func (* config.Config , * authorization.Builder , publish.Reporter ) (request.Handler , error )
69- }
70-
7167// NewMux registers apm handlers to paths building up the APM Server API.
72- func NewMux (beaterConfig * config.Config , report publish.Reporter ) (* http.ServeMux , error ) {
68+ func NewMux (beatInfo beat. Info , beaterConfig * config.Config , report publish.Reporter ) (* http.ServeMux , error ) {
7369 pool := request .NewContextPool ()
7470 mux := http .NewServeMux ()
7571 logger := logp .NewLogger (logs .Handler )
@@ -79,26 +75,36 @@ func NewMux(beaterConfig *config.Config, report publish.Reporter) (*http.ServeMu
7975 return nil , err
8076 }
8177
78+ builder := routeBuilder {
79+ info : beatInfo ,
80+ cfg : beaterConfig ,
81+ authBuilder : auth ,
82+ reporter : report ,
83+ }
84+
85+ type route struct {
86+ path string
87+ handlerFn func () (request.Handler , error )
88+ }
8289 routeMap := []route {
83- {RootPath , rootHandler },
84- {AssetSourcemapPath , sourcemapHandler },
85- {AgentConfigPath , backendAgentConfigHandler },
86- {AgentConfigRUMPath , rumAgentConfigHandler },
87- {IntakeRUMPath , rumIntakeHandler },
88- {IntakeRUMV3Path , rumV3IntakeHandler },
89- {IntakePath , backendIntakeHandler },
90+ {RootPath , builder . rootHandler },
91+ {AssetSourcemapPath , builder . sourcemapHandler },
92+ {AgentConfigPath , builder . backendAgentConfigHandler },
93+ {AgentConfigRUMPath , builder . rumAgentConfigHandler },
94+ {IntakeRUMPath , builder . rumIntakeHandler },
95+ {IntakeRUMV3Path , builder . rumV3IntakeHandler },
96+ {IntakePath , builder . backendIntakeHandler },
9097 // The profile endpoint is in Beta
91- {ProfilePath , profileHandler },
98+ {ProfilePath , builder . profileHandler },
9299 }
93100
94101 for _ , route := range routeMap {
95- h , err := route .handlerFn (beaterConfig , auth , report )
102+ h , err := route .handlerFn ()
96103 if err != nil {
97104 return nil , err
98105 }
99106 logger .Infof ("Path %s added to request handler" , route .path )
100107 mux .Handle (route .path , pool .HTTPHandler (h ))
101-
102108 }
103109 if beaterConfig .Expvar .IsEnabled () {
104110 path := beaterConfig .Expvar .URL
@@ -108,41 +114,53 @@ func NewMux(beaterConfig *config.Config, report publish.Reporter) (*http.ServeMu
108114 return mux , nil
109115}
110116
111- func profileHandler (cfg * config.Config , builder * authorization.Builder , reporter publish.Reporter ) (request.Handler , error ) {
112- h := profile .Handler (reporter )
113- authHandler := builder .ForPrivilege (authorization .PrivilegeEventWrite .Action )
114- return middleware .Wrap (h , backendMiddleware (cfg , authHandler , profile .MonitoringMap )... )
117+ type routeBuilder struct {
118+ info beat.Info
119+ cfg * config.Config
120+ authBuilder * authorization.Builder
121+ reporter publish.Reporter
115122}
116123
117- func backendIntakeHandler ( cfg * config. Config , builder * authorization. Builder , reporter publish. Reporter ) (request.Handler , error ) {
118- h := intake .Handler (stream . BackendProcessor ( cfg ), reporter )
119- authHandler := builder .ForPrivilege (authorization .PrivilegeEventWrite .Action )
120- return middleware .Wrap (h , backendMiddleware (cfg , authHandler , intake .MonitoringMap )... )
124+ func ( r * routeBuilder ) profileHandler ( ) (request.Handler , error ) {
125+ h := profile .Handler (r . reporter )
126+ authHandler := r . authBuilder .ForPrivilege (authorization .PrivilegeEventWrite .Action )
127+ return middleware .Wrap (h , backendMiddleware (r . cfg , authHandler , profile .MonitoringMap )... )
121128}
122129
123- func rumIntakeHandler (cfg * config.Config , _ * authorization.Builder , reporter publish.Reporter ) (request.Handler , error ) {
124- h := intake .Handler (stream .RUMV2Processor (cfg ), reporter )
125- return middleware .Wrap (h , rumMiddleware (cfg , nil , intake .MonitoringMap )... )
130+ func (r * routeBuilder ) backendIntakeHandler () (request.Handler , error ) {
131+ h := intake .Handler (stream .BackendProcessor (r .cfg ), r .reporter )
132+ authHandler := r .authBuilder .ForPrivilege (authorization .PrivilegeEventWrite .Action )
133+ return middleware .Wrap (h , backendMiddleware (r .cfg , authHandler , intake .MonitoringMap )... )
126134}
127135
128- func rumV3IntakeHandler ( cfg * config. Config , _ * authorization. Builder , reporter publish. Reporter ) (request.Handler , error ) {
129- h := intake .Handler (stream .RUMV3Processor ( cfg ), reporter )
130- return middleware .Wrap (h , rumMiddleware (cfg , nil , intake .MonitoringMap )... )
136+ func ( r * routeBuilder ) rumIntakeHandler ( ) (request.Handler , error ) {
137+ h := intake .Handler (stream .RUMV2Processor ( r . cfg ), r . reporter )
138+ return middleware .Wrap (h , rumMiddleware (r . cfg , nil , intake .MonitoringMap )... )
131139}
132140
133- func sourcemapHandler (cfg * config.Config , builder * authorization.Builder , reporter publish.Reporter ) (request.Handler , error ) {
134- h := sourcemap .Handler (reporter )
135- authHandler := builder .ForPrivilege (authorization .PrivilegeSourcemapWrite .Action )
136- return middleware .Wrap (h , sourcemapMiddleware (cfg , authHandler )... )
141+ func (r * routeBuilder ) rumV3IntakeHandler () (request.Handler , error ) {
142+ h := intake .Handler (stream .RUMV3Processor (r .cfg ), r .reporter )
143+ return middleware .Wrap (h , rumMiddleware (r .cfg , nil , intake .MonitoringMap )... )
137144}
138145
139- func backendAgentConfigHandler (cfg * config.Config , builder * authorization.Builder , _ publish.Reporter ) (request.Handler , error ) {
140- authHandler := builder .ForPrivilege (authorization .PrivilegeAgentConfigRead .Action )
141- return agentConfigHandler (cfg , authHandler , backendMiddleware )
146+ func (r * routeBuilder ) sourcemapHandler () (request.Handler , error ) {
147+ h := sourcemap .Handler (r .reporter )
148+ authHandler := r .authBuilder .ForPrivilege (authorization .PrivilegeSourcemapWrite .Action )
149+ return middleware .Wrap (h , sourcemapMiddleware (r .cfg , authHandler )... )
142150}
143151
144- func rumAgentConfigHandler (cfg * config.Config , _ * authorization.Builder , _ publish.Reporter ) (request.Handler , error ) {
145- return agentConfigHandler (cfg , nil , rumMiddleware )
152+ func (r * routeBuilder ) rootHandler () (request.Handler , error ) {
153+ h := root .Handler (root.HandlerConfig {Version : r .info .Version })
154+ return middleware .Wrap (h , rootMiddleware (r .cfg , r .authBuilder .ForAnyOfPrivileges (authorization .ActionAny ))... )
155+ }
156+
157+ func (r * routeBuilder ) backendAgentConfigHandler () (request.Handler , error ) {
158+ authHandler := r .authBuilder .ForPrivilege (authorization .PrivilegeAgentConfigRead .Action )
159+ return agentConfigHandler (r .cfg , authHandler , backendMiddleware )
160+ }
161+
162+ func (r * routeBuilder ) rumAgentConfigHandler () (request.Handler , error ) {
163+ return agentConfigHandler (r .cfg , nil , rumMiddleware )
146164}
147165
148166type middlewareFunc func (* config.Config , * authorization.Handler , map [request.ResultID ]* monitoring.Int ) []middleware.Middleware
@@ -161,11 +179,6 @@ func agentConfigHandler(cfg *config.Config, authHandler *authorization.Handler,
161179 return middleware .Wrap (h , append (middlewareFunc (cfg , authHandler , agent .MonitoringMap ), ks )... )
162180}
163181
164- func rootHandler (cfg * config.Config , builder * authorization.Builder , _ publish.Reporter ) (request.Handler , error ) {
165- return middleware .Wrap (root .Handler (),
166- rootMiddleware (cfg , builder .ForAnyOfPrivileges (authorization .ActionAny ))... )
167- }
168-
169182func apmMiddleware (m map [request.ResultID ]* monitoring.Int ) []middleware.Middleware {
170183 return []middleware.Middleware {
171184 middleware .LogMiddleware (),
0 commit comments