mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-23 08:48:32 +02:00
api: remove service health from prometheus, implement godoxy metrics
This commit is contained in:
@@ -2,29 +2,34 @@ package v1
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/coder/websocket/wsjson"
|
||||
agentPkg "github.com/yusing/go-proxy/agent/pkg/agent"
|
||||
U "github.com/yusing/go-proxy/internal/api/v1/utils"
|
||||
config "github.com/yusing/go-proxy/internal/config/types"
|
||||
"github.com/yusing/go-proxy/internal/metrics"
|
||||
"github.com/yusing/go-proxy/internal/metrics/systeminfo"
|
||||
)
|
||||
|
||||
func SystemInfo(cfg config.ConfigInstance, w http.ResponseWriter, r *http.Request) {
|
||||
agentName := r.FormValue("agent_name")
|
||||
isWS := strings.HasSuffix(r.URL.Path, "/ws")
|
||||
agentName := r.URL.Query().Get("agent_name")
|
||||
if agentName == "" {
|
||||
info, err := metrics.GetSystemInfo(r.Context())
|
||||
if err != nil {
|
||||
U.HandleErr(w, r, err)
|
||||
return
|
||||
if isWS {
|
||||
systeminfo.Poller.ServeWS(cfg, w, r)
|
||||
} else {
|
||||
systeminfo.Poller.ServeHTTP(w, r)
|
||||
}
|
||||
U.RespondJSON(w, r, info)
|
||||
} else {
|
||||
agent, ok := cfg.GetAgent(agentName)
|
||||
if !ok {
|
||||
U.HandleErr(w, r, U.ErrInvalidKey("agent_name"), http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
respData, status, err := agent.Fetch(r.Context(), agentPkg.EndpointSystemInfo)
|
||||
return
|
||||
}
|
||||
|
||||
agent, ok := cfg.GetAgent(agentName)
|
||||
if !ok {
|
||||
U.HandleErr(w, r, U.ErrInvalidKey("agent_name"), http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
if !isWS {
|
||||
respData, status, err := agent.Forward(r, agentPkg.EndpointSystemInfo)
|
||||
if err != nil {
|
||||
U.HandleErr(w, r, err)
|
||||
return
|
||||
@@ -33,6 +38,35 @@ func SystemInfo(cfg config.ConfigInstance, w http.ResponseWriter, r *http.Reques
|
||||
http.Error(w, string(respData), status)
|
||||
return
|
||||
}
|
||||
U.RespondJSON(w, r, respData)
|
||||
U.WriteBody(w, respData)
|
||||
} else {
|
||||
clientConn, err := U.InitiateWS(cfg, w, r)
|
||||
if err != nil {
|
||||
U.HandleErr(w, r, err)
|
||||
return
|
||||
}
|
||||
agentConn, _, err := agent.Websocket(r.Context(), agentPkg.EndpointSystemInfo)
|
||||
if err != nil {
|
||||
U.HandleErr(w, r, err)
|
||||
return
|
||||
}
|
||||
//nolint:errcheck
|
||||
defer agentConn.CloseNow()
|
||||
var data []byte
|
||||
for {
|
||||
select {
|
||||
case <-r.Context().Done():
|
||||
return
|
||||
default:
|
||||
err := wsjson.Read(r.Context(), agentConn, &data)
|
||||
if err == nil {
|
||||
err = wsjson.Write(r.Context(), clientConn, data)
|
||||
}
|
||||
if err != nil {
|
||||
U.HandleErr(w, r, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user