func main()

in cmd/intake-receiver/main.go [46:109]


func main() {
	// Ignored flags, they are just here to allow the `intake-receiver` to be
	// dropped in as a replacement for APM Server. This means, that all the
	// config options are ignored.
	flag.String("e", "", "apm-server compatibility option")
	flag.String("E", "", "apm-server compatibility option")
	flag.String("httpprof", "", "apm-server compatibility option")

	var host, folder string
	flag.StringVar(&host, "host", ":8200", "port that the server will listen to")
	flag.StringVar(&folder, "folder", "events", "The path where the received intake events will be stored")
	flag.Parse()

	// Create a context that will be cancelled when an interrupt is received.
	ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)
	defer stop()

	if err := os.MkdirAll(folder, 0755); err != nil {
		log.Fatalln(err)
	}
	var agentFileMap fileMap
	defer agentFileMap.m.Range(func(_, v interface{}) bool {
		if f, ok := v.(*syncFile); ok && f != nil {
			f.Close()
			log.Println("closed file", f.Name())
		}
		return true
	})
	rh := requestHandler{
		agentFileMap: &agentFileMap,
		basePath:     folder,
		rootResponse: fmt.Sprintf(`{"publish_ready":true,"version":"%s"}`+"\n", version),
		bufPool:      sync.Pool{New: func() interface{} { return &bytes.Buffer{} }},
		bytesBufPool: sync.Pool{New: func() interface{} { return make([]byte, maxScannerBufSize) }},
	}
	mux := http.NewServeMux()
	mux.Handle("/", rh.rootHandler())
	// TODO(marclop): intake/v2/rum and /intake/v3/rum/events are not supported.
	for _, p := range []string{"/intake/v2/events"} {
		mux.Handle(p, rh.eventHandler())
	}
	srv := http.Server{
		Addr:        host,
		Handler:     mux,
		ReadTimeout: 30 * time.Second,
		BaseContext: func(l net.Listener) context.Context { return ctx },
	}

	go func() {
		<-ctx.Done()
		log.Println("closing http server...")

		shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
		defer cancel()
		if err := srv.Shutdown(shutdownCtx); err != nil {
			log.Println(err)
		}
	}()

	log.Println("http server listening for requests on", srv.Addr)
	if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
		log.Println(err)
	}
}