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)
}
}