/
server_api.go
87 lines (84 loc) · 1.87 KB
/
server_api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package api
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/sipt/shuttle/proxy"
)
type Group struct {
Name string `json:"name"`
Servers []*Server `json:"servers"`
SelectType string `json:"select_type"`
}
type Server struct {
Name string `json:"name"`
Selected bool `json:"selected"`
Rtt string `json:"rtt,omitempty"`
}
func ServerList(ctx *gin.Context) {
gs := proxy.GetGroups()
groups := make([]*Group, len(gs))
var name string
var group *Group
for i, g := range gs {
group = &Group{
Name: g.Name,
Servers: make([]*Server, len(g.Servers)),
SelectType: g.SelectType,
}
for j, s := range g.Servers {
name = s.(proxy.IServer).GetName()
group.Servers[j] = &Server{
Name: name,
Selected: g.Selector.Current().GetName() == name,
}
if g.SelectType == "rtt" {
if ser, ok := s.(*proxy.Server); ok {
if ser.Rtt == 0 {
group.Servers[j].Rtt = "failed"
} else {
group.Servers[j].Rtt = fmt.Sprintf("%dms", ser.Rtt.Nanoseconds()/1000000)
}
}
}
}
groups[i] = group
}
ctx.JSON(200, Response{
Data: groups,
})
}
func SelectServer(ctx *gin.Context) {
groupName := ctx.PostForm("group")
serverName := ctx.PostForm("server")
if len(groupName) == 0 || len(serverName) == 0 {
ctx.JSON(500, Response{
Code: 1, Message: "group or server is empty",
})
return
}
err := proxy.SelectServer(groupName, serverName)
if err != nil {
ctx.JSON(500, Response{
Code: 1, Message: err.Error(),
})
return
}
ctx.JSON(200, Response{})
}
func SelectRefresh(ctx *gin.Context) {
groupName := ctx.PostForm("group")
if len(groupName) == 0 {
ctx.JSON(500, Response{
Code: 1, Message: "group is empty",
})
return
}
err := proxy.SelectRefresh(groupName)
if err != nil {
ctx.JSON(500, Response{
Code: 1, Message: err.Error(),
})
return
}
ctx.JSON(200, Response{})
}