diff --git a/agent/pkg/handler/check_health.go b/agent/pkg/handler/check_health.go index 736e3d5e..57916490 100644 --- a/agent/pkg/handler/check_health.go +++ b/agent/pkg/handler/check_health.go @@ -9,11 +9,10 @@ import ( "strings" "github.com/yusing/go-proxy/internal/types" - "github.com/yusing/go-proxy/internal/watcher/health" "github.com/yusing/go-proxy/internal/watcher/health/monitor" ) -var defaultHealthConfig = health.DefaultHealthConfig() +var defaultHealthConfig = types.DefaultHealthConfig() func CheckHealth(w http.ResponseWriter, r *http.Request) { query := r.URL.Query() diff --git a/agent/pkg/handler/handler.go b/agent/pkg/handler/handler.go index 9459c948..9391597e 100644 --- a/agent/pkg/handler/handler.go +++ b/agent/pkg/handler/handler.go @@ -4,6 +4,8 @@ import ( "fmt" "net/http" + "github.com/gin-gonic/gin" + "github.com/gorilla/websocket" "github.com/yusing/go-proxy/agent/pkg/agent" "github.com/yusing/go-proxy/agent/pkg/env" "github.com/yusing/go-proxy/internal/metrics/systeminfo" @@ -21,9 +23,26 @@ func (mux ServeMux) HandleFunc(endpoint string, handler http.HandlerFunc) { mux.ServeMux.HandleFunc(agent.APIEndpointBase+endpoint, handler) } +var upgrader = &websocket.Upgrader{ + // no origin check needed for internal websocket + CheckOrigin: func(r *http.Request) bool { + return true + }, +} + func NewAgentHandler() http.Handler { + gin.SetMode(gin.ReleaseMode) mux := ServeMux{http.NewServeMux()} + metricsHandler := gin.Default() + { + metrics := metricsHandler.Group(agent.APIEndpointBase) + metrics.GET(agent.EndpointSystemInfo, func(c *gin.Context) { + c.Set("upgrader", upgrader) + systeminfo.Poller.ServeHTTP(c) + }) + } + mux.HandleFunc(agent.EndpointProxyHTTP+"/{path...}", ProxyHTTP) mux.HandleEndpoint("GET", agent.EndpointVersion, func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, pkg.GetVersion()) @@ -32,7 +51,7 @@ func NewAgentHandler() http.Handler { fmt.Fprint(w, env.AgentName) }) mux.HandleEndpoint("GET", agent.EndpointHealth, CheckHealth) - mux.HandleEndpoint("GET", agent.EndpointSystemInfo, systeminfo.Poller.ServeHTTP) + mux.HandleEndpoint("GET", agent.EndpointSystemInfo, metricsHandler.ServeHTTP) mux.ServeMux.HandleFunc("/", socketproxy.DockerSocketHandler(env.DockerSocket)) return mux }