in agent/server/agent_http_server.go [32:77]
func StartHttpServer(agentConfig config.AgentConfig, handlers HandlerSpec, messageSources *messagesources.MessageSources) {
if agentConfig.AgentAdminMode == config.UDS {
// When starting a UDS HttpServer, UDS path needs to be removed first if it exists,
// or there will be 'address already in use' error
if err := os.Remove(agentConfig.AgentAdminUdsPath); err != nil && !os.IsNotExist(err) {
log.Fatalf("Failed to remove Agent Admin UDS path:[%s], %v", agentConfig.AgentAdminUdsPath, err)
messageSources.SetAgentExit()
return
}
}
// Register all configured handlers
router := mux.NewRouter()
for path, function := range handlers {
if function == nil {
log.Warnf("Handler for path [%s] is nil. Not regstering it", path)
continue
}
router.HandleFunc(path, function)
}
var listener net.Listener
var err error
switch agentConfig.AgentAdminMode {
case config.UDS:
listener, err = net.Listen(config.NETWORK_SOCKET_UNIX, agentConfig.AgentAdminUdsPath)
if err != nil {
log.Fatalf("Error starting the Agent HTTP server on Uds path, exiting agent: %v", err)
messageSources.SetAgentExit()
return
}
case config.TCP:
tcpAddr := fmt.Sprintf("%s:%d", agentConfig.AgentHttpAddress, agentConfig.AgentHttpPort)
listener, err = net.Listen(config.NETWORK_SOCKET_TCP, tcpAddr)
if err != nil {
log.Fatalf("Unable to start a listener on TCP Address, exiting agent: %v", err)
messageSources.SetAgentExit()
return
}
}
log.Infof("Server started, %s", listener.Addr().String())
if err := http.Serve(listener, router); err != nil {
log.Fatalf("Error starting the Agents HTTP server, exiting agent: %v", err)
messageSources.SetAgentExit()
return
}
}