func newServer()

in internal/beater/server.go [166:215]


func newServer(args ServerParams, listener net.Listener) (server, error) {
	publishReady := func() bool {
		select {
		case <-args.PublishReady:
			return true
		default:
			return false
		}
	}

	// Create an HTTP server for serving Elastic APM agent requests.
	router, err := api.NewMux(
		args.Config,
		args.BatchProcessor,
		args.Authenticator,
		args.AgentConfig,
		args.RateLimitStore,
		args.SourcemapFetcher,
		publishReady,
		args.Semaphore,
		args.MeterProvider,
		args.Logger,
	)
	if err != nil {
		return server{}, err
	}
	apmgorilla.Instrument(router, apmgorilla.WithRequestIgnorer(doNotTrace), apmgorilla.WithTracer(args.Tracer))
	httpServer, err := newHTTPServer(args.Logger, args.Config, router, listener)
	if err != nil {
		return server{}, err
	}

	otlpBatchProcessor := args.BatchProcessor
	if args.Config.AugmentEnabled {
		// Add a model processor that sets `client.ip` for events from end-user devices.
		otlpBatchProcessor = modelprocessor.Chained{
			modelpb.ProcessBatchFunc(otlp.SetClientMetadata),
			otlpBatchProcessor,
		}
	}
	zapLogger := zap.New(args.Logger.Core(), zap.WithCaller(true))
	otlp.RegisterGRPCServices(args.GRPCServer, zapLogger, otlpBatchProcessor, args.Semaphore, args.MeterProvider)

	return server{
		logger:     args.Logger,
		cfg:        args.Config,
		httpServer: httpServer,
		grpcServer: args.GRPCServer,
	}, nil
}