|
@@ -189,6 +189,119 @@ func getProxyStatsByType(proxyType string) (proxyInfos []*ProxyStatsInfo) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// Get proxy info by name.
|
|
|
|
+type GetProxyStatsResp struct {
|
|
|
|
+ GeneralResponse
|
|
|
|
+
|
|
|
|
+ Name string `json:"name"`
|
|
|
|
+ Conf config.ProxyConf `json:"conf"`
|
|
|
|
+ TodayTrafficIn int64 `json:"today_traffic_in"`
|
|
|
|
+ TodayTrafficOut int64 `json:"today_traffic_out"`
|
|
|
|
+ CurConns int64 `json:"cur_conns"`
|
|
|
|
+ LastStartTime string `json:"last_start_time"`
|
|
|
|
+ LastCloseTime string `json:"last_close_time"`
|
|
|
|
+ Status string `json:"status"`
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// api/proxy/tcp/:name
|
|
|
|
+func apiProxyTcpByName(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
|
|
|
|
+ var (
|
|
|
|
+ buf []byte
|
|
|
|
+ res GetProxyStatsResp
|
|
|
|
+ )
|
|
|
|
+ name := params.ByName("name")
|
|
|
|
+
|
|
|
|
+ defer func() {
|
|
|
|
+ log.Info("Http response [/api/proxy/tcp/:name]: code [%d]", res.Code)
|
|
|
|
+ }()
|
|
|
|
+ log.Info("Http request: [/api/proxy/tcp/:name]")
|
|
|
|
+
|
|
|
|
+ res = getProxyStatsByTypeAndName(consts.TcpProxy, name)
|
|
|
|
+
|
|
|
|
+ buf, _ = json.Marshal(&res)
|
|
|
|
+ w.Write(buf)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// api/proxy/udp/:name
|
|
|
|
+func apiProxyUdpByName(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
|
|
|
|
+ var (
|
|
|
|
+ buf []byte
|
|
|
|
+ res GetProxyStatsResp
|
|
|
|
+ )
|
|
|
|
+ name := params.ByName("name")
|
|
|
|
+
|
|
|
|
+ defer func() {
|
|
|
|
+ log.Info("Http response [/api/proxy/udp/:name]: code [%d]", res.Code)
|
|
|
|
+ }()
|
|
|
|
+ log.Info("Http request: [/api/proxy/udp/:name]")
|
|
|
|
+
|
|
|
|
+ res = getProxyStatsByTypeAndName(consts.UdpProxy, name)
|
|
|
|
+
|
|
|
|
+ buf, _ = json.Marshal(&res)
|
|
|
|
+ w.Write(buf)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// api/proxy/http/:name
|
|
|
|
+func apiProxyHttpByName(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
|
|
|
|
+ var (
|
|
|
|
+ buf []byte
|
|
|
|
+ res GetProxyStatsResp
|
|
|
|
+ )
|
|
|
|
+ name := params.ByName("name")
|
|
|
|
+
|
|
|
|
+ defer func() {
|
|
|
|
+ log.Info("Http response [/api/proxy/http/:name]: code [%d]", res.Code)
|
|
|
|
+ }()
|
|
|
|
+ log.Info("Http request: [/api/proxy/http/:name]")
|
|
|
|
+
|
|
|
|
+ res = getProxyStatsByTypeAndName(consts.HttpProxy, name)
|
|
|
|
+
|
|
|
|
+ buf, _ = json.Marshal(&res)
|
|
|
|
+ w.Write(buf)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// api/proxy/https/:name
|
|
|
|
+func apiProxyHttpsByName(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
|
|
|
|
+ var (
|
|
|
|
+ buf []byte
|
|
|
|
+ res GetProxyStatsResp
|
|
|
|
+ )
|
|
|
|
+ name := params.ByName("name")
|
|
|
|
+
|
|
|
|
+ defer func() {
|
|
|
|
+ log.Info("Http response [/api/proxy/https/:name]: code [%d]", res.Code)
|
|
|
|
+ }()
|
|
|
|
+ log.Info("Http request: [/api/proxy/https/:name]")
|
|
|
|
+
|
|
|
|
+ res = getProxyStatsByTypeAndName(consts.HttpsProxy, name)
|
|
|
|
+
|
|
|
|
+ buf, _ = json.Marshal(&res)
|
|
|
|
+ w.Write(buf)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func getProxyStatsByTypeAndName(proxyType string, proxyName string) (proxyInfo GetProxyStatsResp) {
|
|
|
|
+ proxyInfo.Name = proxyName
|
|
|
|
+ ps := StatsGetProxiesByTypeAndName(proxyType, proxyName)
|
|
|
|
+ if ps == nil {
|
|
|
|
+ proxyInfo.Code = 1
|
|
|
|
+ proxyInfo.Msg = "no proxy info found"
|
|
|
|
+ } else {
|
|
|
|
+ if pxy, ok := ServerService.pxyManager.GetByName(proxyName); ok {
|
|
|
|
+ proxyInfo.Conf = pxy.GetConf()
|
|
|
|
+ proxyInfo.Status = consts.Online
|
|
|
|
+ } else {
|
|
|
|
+ proxyInfo.Status = consts.Offline
|
|
|
|
+ }
|
|
|
|
+ proxyInfo.TodayTrafficIn = ps.TodayTrafficIn
|
|
|
|
+ proxyInfo.TodayTrafficOut = ps.TodayTrafficOut
|
|
|
|
+ proxyInfo.CurConns = ps.CurConns
|
|
|
|
+ proxyInfo.LastStartTime = ps.LastStartTime
|
|
|
|
+ proxyInfo.LastCloseTime = ps.LastCloseTime
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
// api/proxy/traffic/:name
|
|
// api/proxy/traffic/:name
|
|
type GetProxyTrafficResp struct {
|
|
type GetProxyTrafficResp struct {
|
|
GeneralResponse
|
|
GeneralResponse
|