package server import ( "net" "net/http" "sync" "github.com/pkg/errors" "github.com/gorilla/mux" "github.com/prometheus/client_golang/prometheus/promhttp" ) type Server struct { HttpServer *http.Server Listener net.Listener wg sync.WaitGroup } var ( networkTCP = "tcp" ) func NewServer(port string) (*Server, error) { network := networkTCP listener, err := net.Listen(network, ":" + port) if err != nil { return nil, errors.Wrap(err, "failed to create listener") } router := mux.NewRouter() router.HandleFunc("/events", eventsHandler).Methods("POST") router.HandleFunc("/events/json", eventsHandlerJson).Methods("POST") router.HandleFunc("/health", healthHandler).Methods("GET") router.HandleFunc("/health/toggle", healthToggleHandler).Methods("GET") router.HandleFunc("/schema/get", getSchemaHandler).Methods("GET") router.HandleFunc("/schema/refresh", refreshSchemaHandler).Methods("POST") router.HandleFunc("/schema/add", addSchemaHandler).Methods("POST") //router.Path("/metrics").Handler(promhttp.Handler()) // router.HandleFunc("/test", testHandler).Methods("GET") // router.HandleFunc("/stop", stopHandler).Methods("POST") httpServer := &http.Server{Addr: ":" + port, Handler: router} newServer := &Server{HttpServer: httpServer, Listener: listener} return newServer, nil } func MetricServer(port string) (*Server, error) { network := networkTCP listener, err := net.Listen(network, ":"+port) if err != nil { return nil, errors.Wrap(err, "failed to create listener") } router := mux.NewRouter() router.Path("/metrics").Handler(promhttp.Handler()) httpServer := &http.Server{Addr: ":" + port, Handler: router} mServer := &Server{HttpServer: httpServer, Listener: listener} return mServer, nil }