in internal/beater/api/mux.go [83:164]
func NewMux(
beaterConfig *config.Config,
batchProcessor modelpb.BatchProcessor,
authenticator *auth.Authenticator,
fetcher agentcfg.Fetcher,
ratelimitStore *ratelimit.Store,
sourcemapFetcher sourcemap.Fetcher,
publishReady func() bool,
semaphore input.Semaphore,
meterProvider metric.MeterProvider,
logger *logp.Logger,
) (*mux.Router, error) {
pool := request.NewContextPool()
logger = logger.Named(logs.Handler)
router := mux.NewRouter()
router.NotFoundHandler = pool.HTTPHandler(notFoundHandler)
builder := routeBuilder{
cfg: beaterConfig,
authenticator: authenticator,
batchProcessor: batchProcessor,
ratelimitStore: ratelimitStore,
sourcemapFetcher: sourcemapFetcher,
intakeSemaphore: semaphore,
logger: logger,
}
zapLogger := zap.New(logger.Core(), zap.WithCaller(true))
builder.intakeProcessor = elasticapm.NewProcessor(elasticapm.Config{
MaxEventSize: beaterConfig.MaxEventSize,
Semaphore: semaphore,
Logger: zapLogger,
})
type route struct {
path string
handlerFn func() (request.Handler, error)
}
otlpHandlers := otlp.NewHTTPHandlers(zapLogger, batchProcessor, semaphore, meterProvider)
rumIntakeHandler := builder.rumIntakeHandler(meterProvider)
routeMap := []route{
{RootPath, builder.rootHandler(publishReady, meterProvider)},
{AgentConfigPath, builder.backendAgentConfigHandler(fetcher, meterProvider)},
{AgentConfigRUMPath, builder.rumAgentConfigHandler(fetcher, meterProvider)},
{IntakeRUMPath, rumIntakeHandler},
{IntakeRUMV3Path, rumIntakeHandler},
{IntakePath, builder.backendIntakeHandler("apm-server.server.", meterProvider)},
{OTLPTracesIntakePath, builder.otlpHandler(otlpHandlers.HandleTraces, "apm-server.otlp.http.traces.", meterProvider)},
{OTLPMetricsIntakePath, builder.otlpHandler(otlpHandlers.HandleMetrics, "apm-server.otlp.http.metrics.", meterProvider)},
{OTLPLogsIntakePath, builder.otlpHandler(otlpHandlers.HandleLogs, "apm-server.otlp.http.logs.", meterProvider)},
}
for _, route := range routeMap {
h, err := route.handlerFn()
if err != nil {
return nil, err
}
logger.Infof("Path %s added to request handler", route.path)
router.Handle(route.path, pool.HTTPHandler(h))
}
if beaterConfig.Expvar.Enabled {
path := beaterConfig.Expvar.URL
logger.Infof("Path %s added to request handler", path)
router.Handle(path, http.HandlerFunc(debugVarsHandler))
}
if beaterConfig.Pprof.Enabled {
const path = "/debug/pprof"
logger.Infof("Path %s added to request handler", path)
pprofRouter := router.PathPrefix(path).Subrouter().StrictSlash(true)
pprofRouter.Handle("/", http.HandlerFunc(httppprof.Index))
for _, p := range pprof.Profiles() {
pprofRouter.Handle("/"+p.Name(), http.HandlerFunc(httppprof.Index))
}
pprofRouter.Handle("/cmdline", http.HandlerFunc(httppprof.Cmdline))
pprofRouter.Handle("/profile", http.HandlerFunc(httppprof.Profile))
pprofRouter.Handle("/symbol", http.HandlerFunc(httppprof.Symbol))
pprofRouter.Handle("/trace", http.HandlerFunc(httppprof.Trace))
}
return router, nil
}