This repository has been archived by the owner on Dec 4, 2019. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 69
/
app.go
126 lines (111 loc) · 2.61 KB
/
app.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
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
123
124
125
126
package main
import (
"strings"
"github.com/coreos/etcd/client"
"github.com/gin-gonic/gin"
"github.com/silenceper/dcmp/etcd"
"github.com/silenceper/dcmp/util"
)
type TreeNode struct {
Name string `json:"name"`
Dir bool `json:"dir"`
Toggled bool `json:"toggled"`
Path string `json:"path"`
Value string `json:"value"`
Children []*TreeNode `json:"children"`
}
func doIndex(c *gin.Context) {
c.Redirect(302, "/frontend")
}
func doKeyList(c *gin.Context) {
resp, err := etcd.GetKeyList(cfg.BasePath)
if err != nil {
util.RenderError(c, -1, err.Error())
return
}
treeNodes := formatEtcdNodes(resp.Node)
util.RenderSuccess(c, treeNodes)
}
func doKeyNew(c *gin.Context) {
key, keyExists := c.GetPostForm("key")
if !keyExists || key == "" {
util.RenderError(c, -1, "参数错误")
return
}
isDir, exists := c.GetPostForm("isDir")
if !exists || isDir == "" {
util.RenderError(c, -1, "参数错误")
return
}
opts := &client.SetOptions{}
if isDir == "yes" {
opts.Dir = true
}
resp, err := etcd.SetKey(key, "", opts)
if err != nil {
util.RenderError(c, -1, err.Error())
return
}
util.RenderSuccess(c, resp)
}
func doKeySave(c *gin.Context) {
key, keyExists := c.GetPostForm("key")
if !keyExists || key == "" {
util.RenderError(c, -1, "参数错误")
return
}
value, valueExists := c.GetPostForm("value")
if !valueExists {
util.RenderError(c, -1, "参数错误")
return
}
resp, err := etcd.UpdateKey(key, value)
if err != nil {
util.RenderError(c, -1, err.Error())
return
}
util.RenderSuccess(c, resp)
}
func doKeyDelete(c *gin.Context) {
key, keyExists := c.GetPostForm("key")
if !keyExists || key == "" {
util.RenderError(c, -1, "参数错误")
return
}
isDir, exists := c.GetPostForm("isDir")
if !exists || isDir == "" {
util.RenderError(c, -1, "参数错误")
return
}
opts := &client.DeleteOptions{}
if isDir == "yes" {
opts.Dir = true
}
resp, err := etcd.DeleteKey(key, opts)
if err != nil {
util.RenderError(c, -1, err.Error())
return
}
util.RenderSuccess(c, resp)
}
func formatEtcdNodes(node *client.Node) *TreeNode {
treeNode := &TreeNode{}
arr := strings.Split(node.Key, "/")
count := len(arr)
if count < 1 {
count = 1
}
treeNode.Name = arr[count-1]
treeNode.Path = node.Key
treeNode.Dir = node.Dir
treeNode.Value = node.Value
treeNode.Toggled = true
for _, v := range node.Nodes {
treeNode.Children = append(treeNode.Children, formatEtcdNodes(v))
}
//必须返回一个空数组供前端渲染
if treeNode.Dir && len(treeNode.Children) == 0 {
treeNode.Children = []*TreeNode{}
}
return treeNode
}