diff --git a/server/dashboard_api.go b/server/dashboard_api.go index d51389f..9753046 100644 --- a/server/dashboard_api.go +++ b/server/dashboard_api.go @@ -28,13 +28,11 @@ import ( ) type GeneralResponse struct { - Code int64 `json:"code"` - Msg string `json:"msg"` + Code int + Msg string } type ServerInfoResp struct { - GeneralResponse - Version string `json:"version"` BindPort int `json:"bind_port"` BindUdpPort int `json:"bind_udp_port"` @@ -55,18 +53,19 @@ type ServerInfoResp struct { // api/serverinfo func (svr *Service) ApiServerInfo(w http.ResponseWriter, r *http.Request) { - var ( - buf []byte - res ServerInfoResp - ) + res := GeneralResponse{Code: 200} defer func() { log.Info("Http response [%s]: code [%d]", r.URL.Path, res.Code) + w.WriteHeader(res.Code) + if len(res.Msg) > 0 { + w.Write([]byte(res.Msg)) + } }() log.Info("Http request: [%s]", r.URL.Path) cfg := &g.GlbServerCfg.ServerCommonConf serverStats := svr.statsCollector.GetServer() - res = ServerInfoResp{ + svrResp := ServerInfoResp{ Version: version.Full(), BindPort: cfg.BindPort, BindUdpPort: cfg.BindUdpPort, @@ -85,8 +84,8 @@ func (svr *Service) ApiServerInfo(w http.ResponseWriter, r *http.Request) { ProxyTypeCounts: serverStats.ProxyTypeCounts, } - buf, _ = json.Marshal(&res) - w.Write(buf) + buf, _ := json.Marshal(&svrResp) + res.Msg = string(buf) } type BaseOutConf struct { @@ -155,31 +154,29 @@ type ProxyStatsInfo struct { } type GetProxyInfoResp struct { - GeneralResponse Proxies []*ProxyStatsInfo `json:"proxies"` } // api/proxy/:type func (svr *Service) ApiProxyByType(w http.ResponseWriter, r *http.Request) { - var ( - buf []byte - res GetProxyInfoResp - ) + res := GeneralResponse{Code: 200} params := mux.Vars(r) proxyType := params["type"] defer func() { log.Info("Http response [%s]: code [%d]", r.URL.Path, res.Code) - log.Info(r.URL.Path) - log.Info(r.URL.RawPath) + w.WriteHeader(res.Code) + if len(res.Msg) > 0 { + w.Write([]byte(res.Msg)) + } }() log.Info("Http request: [%s]", r.URL.Path) - res.Proxies = svr.getProxyStatsByType(proxyType) - - buf, _ = json.Marshal(&res) - w.Write(buf) + proxyInfoResp := GetProxyInfoResp{} + proxyInfoResp.Proxies = svr.getProxyStatsByType(proxyType) + buf, _ := json.Marshal(&proxyInfoResp) + res.Msg = string(buf) } func (svr *Service) getProxyStatsByType(proxyType string) (proxyInfos []*ProxyStatsInfo) { @@ -215,8 +212,6 @@ func (svr *Service) getProxyStatsByType(proxyType string) (proxyInfos []*ProxySt // Get proxy info by name. type GetProxyStatsResp struct { - GeneralResponse - Name string `json:"name"` Conf interface{} `json:"conf"` TodayTrafficIn int64 `json:"today_traffic_in"` @@ -229,45 +224,50 @@ type GetProxyStatsResp struct { // api/proxy/:type/:name func (svr *Service) ApiProxyByTypeAndName(w http.ResponseWriter, r *http.Request) { - var ( - buf []byte - res GetProxyStatsResp - ) + res := GeneralResponse{Code: 200} params := mux.Vars(r) proxyType := params["type"] name := params["name"] defer func() { log.Info("Http response [%s]: code [%d]", r.URL.Path, res.Code) + w.WriteHeader(res.Code) + if len(res.Msg) > 0 { + w.Write([]byte(res.Msg)) + } }() log.Info("Http request: [%s]", r.URL.Path) - res = svr.getProxyStatsByTypeAndName(proxyType, name) + proxyStatsResp := GetProxyStatsResp{} + proxyStatsResp, res.Code, res.Msg = svr.getProxyStatsByTypeAndName(proxyType, name) + if res.Code != 200 { + return + } - buf, _ = json.Marshal(&res) - w.Write(buf) + buf, _ := json.Marshal(&proxyStatsResp) + res.Msg = string(buf) } -func (svr *Service) getProxyStatsByTypeAndName(proxyType string, proxyName string) (proxyInfo GetProxyStatsResp) { +func (svr *Service) getProxyStatsByTypeAndName(proxyType string, proxyName string) (proxyInfo GetProxyStatsResp, code int, msg string) { proxyInfo.Name = proxyName ps := svr.statsCollector.GetProxiesByTypeAndName(proxyType, proxyName) if ps == nil { - proxyInfo.Code = 1 - proxyInfo.Msg = "no proxy info found" + code = 404 + msg = "no proxy info found" } else { if pxy, ok := svr.pxyManager.GetByName(proxyName); ok { content, err := json.Marshal(pxy.GetConf()) if err != nil { log.Warn("marshal proxy [%s] conf info error: %v", ps.Name, err) - proxyInfo.Code = 2 - proxyInfo.Msg = "parse conf error" + code = 400 + msg = "parse conf error" return } proxyInfo.Conf = getConfByType(ps.Type) if err = json.Unmarshal(content, &proxyInfo.Conf); err != nil { log.Warn("unmarshal proxy [%s] conf info error: %v", ps.Name, err) - proxyInfo.Code = 2 - proxyInfo.Msg = "parse conf error" + code = 400 + msg = "parse conf error" return } proxyInfo.Status = consts.Online @@ -286,36 +286,38 @@ func (svr *Service) getProxyStatsByTypeAndName(proxyType string, proxyName strin // api/traffic/:name type GetProxyTrafficResp struct { - GeneralResponse - Name string `json:"name"` TrafficIn []int64 `json:"traffic_in"` TrafficOut []int64 `json:"traffic_out"` } func (svr *Service) ApiProxyTraffic(w http.ResponseWriter, r *http.Request) { - var ( - buf []byte - res GetProxyTrafficResp - ) + res := GeneralResponse{Code: 200} params := mux.Vars(r) name := params["name"] defer func() { log.Info("Http response [%s]: code [%d]", r.URL.Path, res.Code) + w.WriteHeader(res.Code) + if len(res.Msg) > 0 { + w.Write([]byte(res.Msg)) + } }() log.Info("Http request: [%s]", r.URL.Path) - res.Name = name + trafficResp := GetProxyTrafficResp{} + trafficResp.Name = name proxyTrafficInfo := svr.statsCollector.GetProxyTraffic(name) + if proxyTrafficInfo == nil { - res.Code = 1 + res.Code = 404 res.Msg = "no proxy info found" + return } else { - res.TrafficIn = proxyTrafficInfo.TrafficIn - res.TrafficOut = proxyTrafficInfo.TrafficOut + trafficResp.TrafficIn = proxyTrafficInfo.TrafficIn + trafficResp.TrafficOut = proxyTrafficInfo.TrafficOut } - buf, _ = json.Marshal(&res) - w.Write(buf) + buf, _ := json.Marshal(&res) + res.Msg = string(buf) } diff --git a/web/frps/Makefile b/web/frps/Makefile index 42dec29..ceffed7 100644 --- a/web/frps/Makefile +++ b/web/frps/Makefile @@ -1,9 +1,7 @@ .PHONY: dist build -install: - @npm install + +build: + @npm run build dev: install @npm run dev - -build: - @npm run build \ No newline at end of file