Files
janus/server/server.go
2023-01-23 16:24:36 +05:30

72 lines
1.6 KiB
Go

package server
import (
"fmt"
"net"
"net/http"
"strings"
"sync"
"github.com/gorilla/mux"
"github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/rs/cors"
)
type Server struct {
HttpServer *http.Server
Listener net.Listener
wg sync.WaitGroup
}
var (
networkTCP = "tcp"
)
func NewServer(port string, corsList 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/json", eventsHandlerJson).Methods("POST")
router.HandleFunc("/health", healthHandler).Methods("GET")
httpServer := &http.Server{Addr: ":" + port, Handler: enableCors(router, corsList)}
newServer := &Server{HttpServer: httpServer, Listener: listener}
return newServer, nil
}
func enableCors(handler http.Handler, corsList string) http.Handler {
corsArray := strings.Split(corsList, ",")
fmt.Print(corsArray)
c := cors.New(cors.Options{
AllowedOrigins: corsArray,
AllowCredentials: false,
// Enable Debugging for testing, consider disabling in production
Debug: false,
})
return c.Handler(handler)
}
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
}