zhangzengfei
2023-05-22 acb15a431beb73159921477415c5d0f7d06c6768
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package webServer
 
import (
    "context"
    "io/ioutil"
    "net/http"
 
    "serfNode/config"
    "serfNode/ipc"
    "serfNode/serf"
 
    "github.com/gin-gonic/gin"
)
 
func Serve(port string) {
 
    r := gin.Default()
    r.GET("/serf/config", getSerfState)
 
    r.GET("/serf/state", getSerfState)
    r.GET("/serf/member", getSerfMembers)
    r.POST("/serf/join", joinCluster)
    r.GET("/serf/leave", leaveCluster)
    r.POST("/serf/plc", transData)
 
    r.Run(":" + port)
}
 
func resetConfig(c *gin.Context) {
    nodeName := config.SerfConf.NodeName
 
    err := ipc.GetConfigFromNodeRed()
    if err == nil {
        if nodeName != config.SerfConf.NodeName {
            ctx := context.Background()
            serf.InitAgent(ctx, *config.SerfConf)
        }
    }
 
}
 
func getSerfState(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "success": true,
        "data":    serf.ClusterState(),
    })
}
 
func getSerfMembers(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "success": true,
        "data":    serf.Members(),
    })
}
 
type joinParam struct {
    NodeAddr string `json:"nodeAddr" binding:"required"`
}
 
func joinCluster(c *gin.Context) {
    var query joinParam
    err := c.BindJSON(&query)
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "success": false,
            "message": "参数错误",
        })
 
        return
    }
 
    err = serf.JoinCluster(query.NodeAddr)
    if err != nil {
        c.JSON(http.StatusOK, gin.H{
            "success": false,
            "message": err.Error(),
        })
 
        return
    }
 
    c.JSON(http.StatusOK, gin.H{
        "success": true,
        "message": "加入成功",
    })
}
 
func leaveCluster(c *gin.Context) {
    err := serf.LeaveCluster()
    if err != nil {
        c.JSON(http.StatusOK, gin.H{
            "success": false,
            "message": err.Error(),
        })
 
        return
    }
 
    c.JSON(http.StatusOK, gin.H{
        "success": true,
        "message": "加入成功",
    })
}
 
func transData(c *gin.Context) {
    bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
 
    err := serf.QueryMsg2Master(serf.PLCDATA, bodyBytes)
    if err != nil {
        c.JSON(http.StatusOK, gin.H{
            "success": false,
            "message": err.Error(),
        })
 
        return
    }
 
    c.JSON(http.StatusOK, gin.H{
        "success": true,
        "message": "发送成功",
    })
}