node.go 8.3 KB
Newer Older
E
eoLinker API Management 已提交
1 2 3 4 5 6
package node

import (
	"encoding/json"
	"errors"

Y
Your Name 已提交
7 8 9
	goku_handler "github.com/eolinker/goku-api-gateway/goku-handler"

	"github.com/eolinker/goku-api-gateway/common/auto-form"
Y
Your Name 已提交
10 11
	"github.com/eolinker/goku-api-gateway/console/module/cluster"

黄孟柱 已提交
12
	log "github.com/eolinker/goku-api-gateway/goku-log"
E
eoLinker API Management 已提交
13 14 15 16

	"net/http"
	"strconv"

黄孟柱 已提交
17 18 19
	"github.com/eolinker/goku-api-gateway/console/controller"
	"github.com/eolinker/goku-api-gateway/console/module/node"
	"github.com/eolinker/goku-api-gateway/utils"
E
eoLinker API Management 已提交
20 21
)

Y
Your Name 已提交
22
const operationNode = "nodeManagement"
E
eoLinker API Management 已提交
23

Y
Your Name 已提交
24 25 26 27 28 29 30 31 32 33 34 35 36 37
//Handlers Handlers
type Handlers struct {
}

//Handlers handlers
func (h *Handlers) Handlers(factory *goku_handler.AccountHandlerFactory) map[string]http.Handler {
	return map[string]http.Handler{
		"/add":            factory.NewAccountHandleFunction(operationNode, true, AddNode),
		"/edit":           factory.NewAccountHandleFunction(operationNode, true, EditNode),
		"/delete":         factory.NewAccountHandleFunction(operationNode, true, DeleteNode),
		"/getInfo":        factory.NewAccountHandleFunction(operationNode, false, GetNodeInfo),
		"/getList":        factory.NewAccountHandleFunction(operationNode, false, GetNodeList),
		"/batchEditGroup": factory.NewAccountHandleFunction(operationNode, true, BatchEditNodeGroup),
		"/batchDelete":    factory.NewAccountHandleFunction(operationNode, true, BatchDeleteNode),
E
eoLinker API Management 已提交
38
	}
Y
Your Name 已提交
39 40 41 42 43 44 45 46 47
}

//NewNodeHandlers new nodeHandlers
func NewNodeHandlers() *Handlers {
	return &Handlers{}
}

//AddNode 新增节点信息
func AddNode(httpResponse http.ResponseWriter, httpRequest *http.Request) {
E
eoLinker API Management 已提交
48 49 50

	cluserName := httpRequest.PostFormValue("cluster")

Y
Your Name 已提交
51 52
	clusterID := cluster.GetClusterIDByName(cluserName)
	if clusterID == 0 {
E
eoLinker API Management 已提交
53 54 55 56 57
		controller.WriteError(httpResponse, "340003", "", "[ERROR]Illegal cluster!", nil)
		return
	}

	//nodeNumber := rsa.CertConf["nodeNumber"].(int)
Y
Your Name 已提交
58
	type NodeParam struct {
Y
Your Name 已提交
59
		NodeName      string `opt:"nodeName,require"`
Y
Your Name 已提交
60
		ListenAddress string `opt:"listenAddress,require"`
Y
Your Name 已提交
61 62 63
		AdminAddress  string `opt:"adminAddress,require"`
		GroupID       int    `opt:"groupID,require"`
		Path          string `opt:"gatewayPath"`
Y
Your Name 已提交
64
	}
Y
Your Name 已提交
65 66 67 68

	param := new(NodeParam)
	err := auto.SetValues(httpRequest.Form, param)
	if err != nil {
Y
Your Name 已提交
69
		controller.WriteError(httpResponse, "230015", "", "[ERROR]", err)
E
eoLinker API Management 已提交
70 71
		return
	}
Y
Your Name 已提交
72
	if !utils.ValidateRemoteAddr(param.ListenAddress) {
E
eoLinker API Management 已提交
73 74
		controller.WriteError(httpResponse,
			"230006",
Y
Your Name 已提交
75 76
			"node", "[ERROR]Illegal listenAddress!",
			errors.New("illegal listenAddress"))
E
eoLinker API Management 已提交
77 78
		return
	}
Y
Your Name 已提交
79 80 81 82 83 84 85 86
	if !utils.ValidateRemoteAddr(param.AdminAddress) {
		controller.WriteError(httpResponse,
			"230007",
			"node", "[ERROR]Illegal listenAddress!",
			errors.New("illegal listenAddress"))
		return
	}
	if param.GroupID != 0 {
E
eoLinker API Management 已提交
87
		// 检查分组是否存在
Y
Your Name 已提交
88
		flag, err := node.CheckNodeGroupIsExist(param.GroupID)
E
eoLinker API Management 已提交
89 90 91 92 93 94 95 96 97 98 99 100

		if !flag {
			controller.WriteError(
				httpResponse,
				"230014",
				"node",
				"[ERROR]The node group does not exist!",
				err)
			return
		}
	}

Y
Your Name 已提交
101
	id, v, result, err := node.AddNode(clusterID, param.NodeName, param.ListenAddress, param.AdminAddress, param.Path, param.GroupID)
E
eoLinker API Management 已提交
102

Y
Your Name 已提交
103
	if err != nil {
E
eoLinker API Management 已提交
104 105 106
		controller.WriteError(httpResponse,
			"330000",
			"node",
Y
Your Name 已提交
107
			result,
E
eoLinker API Management 已提交
108 109 110 111 112
			err)
		return
	}

	res := map[string]interface{}{
Y
Your Name 已提交
113 114
		"nodeID":     id,
		"version":    v,
E
eoLinker API Management 已提交
115 116 117 118 119 120
		"statusCode": "000000",
		"type":       "node",
		"resultDesc": "",
	}
	data, _ := json.Marshal(res)

Y
Your Name 已提交
121
	_, _ = httpResponse.Write(data)
E
eoLinker API Management 已提交
122 123
}

Y
Your Name 已提交
124
//EditNode 修改节点信息
E
eoLinker API Management 已提交
125 126 127
func EditNode(httpResponse http.ResponseWriter, httpRequest *http.Request) {

	nodeName := httpRequest.PostFormValue("nodeName")
Y
Your Name 已提交
128 129
	listenAddress := httpRequest.PostFormValue("listenAddress")
	adminAddress := httpRequest.PostFormValue("adminAddress")
E
eoLinker API Management 已提交
130 131 132 133 134 135
	groupID := httpRequest.PostFormValue("groupID")
	nodeID := httpRequest.PostFormValue("nodeID")

	gatewayPath := httpRequest.PostFormValue("gatewayPath")
	// key := httpRequest.PostFormValue("key")

Y
Your Name 已提交
136 137 138 139 140 141 142 143 144 145 146 147
	if !utils.ValidateRemoteAddr(listenAddress) {
		controller.WriteError(httpResponse,
			"230006",
			"node", "[ERROR]Illegal listenAddress!",
			errors.New("illegal listenAddress"))
		return
	}
	if !utils.ValidateRemoteAddr(adminAddress) {
		controller.WriteError(httpResponse,
			"230007",
			"node", "[ERROR]Illegal listenAddress!",
			errors.New("illegal listenAddress"))
E
eoLinker API Management 已提交
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
		return
	}

	id, err := strconv.Atoi(nodeID)
	if err != nil {

		controller.WriteError(httpResponse, "230001", "node", "[ERROR]Illegal nodeID!", err)
		return
	}
	gID, err := strconv.Atoi(groupID)
	if err != nil && groupID != "" {
		controller.WriteError(httpResponse, "230015", "node", "[ERROR]Illegal groupID!", err)
		return
	}

	if gID != 0 {
		// 检查分组是否存在
Y
Your Name 已提交
165
		flag, err := node.CheckNodeGroupIsExist(gID)
E
eoLinker API Management 已提交
166 167 168 169 170 171 172 173 174 175 176 177

		if !flag {
			controller.WriteError(
				httpResponse,
				"230014",
				"node",
				"[ERROR]The node group does not exist!",
				err)
			return
		}
	}

Y
Your Name 已提交
178
	result, err := node.EditNode(nodeName, listenAddress, adminAddress, gatewayPath, id, gID)
E
eoLinker API Management 已提交
179

Y
Your Name 已提交
180
	if err != nil {
E
eoLinker API Management 已提交
181 182 183 184 185 186 187 188
		controller.WriteError(httpResponse, "330000", "node", result, nil)
		return
	}

	controller.WriteResultInfo(httpResponse, "node", "", nil)
	return
}

Y
Your Name 已提交
189
//DeleteNode 删除节点信息
E
eoLinker API Management 已提交
190 191 192 193 194 195 196 197 198 199 200 201 202 203
func DeleteNode(httpResponse http.ResponseWriter, httpRequest *http.Request) {

	nodeID := httpRequest.PostFormValue("nodeID")

	id, err := strconv.Atoi(nodeID)
	if err != nil {
		controller.WriteError(httpResponse,
			"230001",
			"node",
			"[ERROR]Illegal nodeID!",
			err)
		return

	}
Y
Your Name 已提交
204 205
	result, err := node.DeleteNode(id)
	if err != nil {
E
eoLinker API Management 已提交
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221

		controller.WriteError(httpResponse,
			"330000",
			"node",
			result,
			err)
		return

	}
	controller.WriteResultInfo(httpResponse, "node", "", nil)
}

// GetNodeList 获取节点列表
func GetNodeList(httpResponse http.ResponseWriter, httpRequest *http.Request) {

	httpRequest.ParseForm()
Y
Your Name 已提交
222
	clusterName := httpRequest.Form.Get("cluster")
E
eoLinker API Management 已提交
223 224 225 226 227 228 229 230 231 232 233 234
	groupID := httpRequest.Form.Get("groupID")
	keyword := httpRequest.Form.Get("keyword")

	gID, err := strconv.Atoi(groupID)
	if err != nil && groupID != "" {
		if groupID != "" {
			controller.WriteError(httpResponse, "330002", "node", "[ERROR]Illegal groupID!", nil)
			return
		}
		gID = -1
	}

Y
Your Name 已提交
235
	clusterID := cluster.GetClusterIDByName(clusterName)
Y
Your Name 已提交
236
	if clusterID == 0 {
E
eoLinker API Management 已提交
237 238 239 240
		controller.WriteError(httpResponse, "330003", "node", "[ERROR]The cluster dosen't exist!", nil)
		return
	}

Y
Your Name 已提交
241 242
	result, err := node.GetNodeList(clusterID, gID, keyword)
	if err != nil {
E
eoLinker API Management 已提交
243 244 245 246 247 248 249 250 251 252 253 254
		controller.WriteError(httpResponse,
			"330000",
			"node",
			"[ERROR]Empty node list!",
			err)
		return
	}
	controller.WriteResultInfo(httpResponse, "node", "nodeList", result)
	// controller.WriteResultInfo(httpResponse, "nodeList", result)

}

Y
Your Name 已提交
255
//GetNodeInfo 获取节点信息
E
eoLinker API Management 已提交
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
func GetNodeInfo(httpResponse http.ResponseWriter, httpRequest *http.Request) {

	nodeID := httpRequest.PostFormValue("nodeID")

	id, err := strconv.Atoi(nodeID)
	if err != nil {

		log.Info("[ERROR] ", httpRequest.RequestURI, ":", err.Error())
		controller.WriteError(httpResponse,
			"230001",
			"node",
			"[ERROR]Illegal nodeID!",
			err)
		return
	}
Y
Your Name 已提交
271 272
	result, err := node.GetNodeInfo(id)
	if err != nil {
E
eoLinker API Management 已提交
273 274 275 276 277 278 279 280 281 282 283 284 285 286

		controller.WriteError(httpResponse,
			"330000",
			"node",
			"[ERROR]The node does not exist!",
			err)
		return

	}
	controller.WriteResultInfo(httpResponse, "node", "nodeInfo", result)

	return
}

Y
Your Name 已提交
287
//BatchEditNodeGroup 批量修改节点分组
E
eoLinker API Management 已提交
288 289 290 291 292 293 294 295 296 297 298 299 300 301
func BatchEditNodeGroup(httpResponse http.ResponseWriter, httpRequest *http.Request) {
	nodeIDList := httpRequest.PostFormValue("nodeIDList")
	groupID := httpRequest.PostFormValue("groupID")

	gID, err := strconv.Atoi(groupID)
	if err != nil {
		controller.WriteError(httpResponse,
			"230015",
			"node",
			"[ERROR]Illegal groupID!",
			err)
		return

	}
Y
Your Name 已提交
302 303
	result, err := node.BatchEditNodeGroup(nodeIDList, gID)
	if err != nil {
E
eoLinker API Management 已提交
304 305 306 307 308 309 310 311 312 313 314 315 316 317 318

		controller.WriteError(httpResponse,
			"330000",
			"node",
			result,
			err)
		return

	}

	controller.WriteResultInfo(httpResponse, "node", "", nil)

	return
}

Y
Your Name 已提交
319
//BatchDeleteNode 批量删除节点
E
eoLinker API Management 已提交
320 321 322 323
func BatchDeleteNode(httpResponse http.ResponseWriter, httpRequest *http.Request) {

	nodeIDList := httpRequest.PostFormValue("nodeIDList")

Y
Your Name 已提交
324 325
	result, err := node.BatchDeleteNode(nodeIDList)
	if err != nil {
E
eoLinker API Management 已提交
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347

		if result == "230013" {
			controller.WriteError(httpResponse,
				"230013",
				"node",
				"[ERROR]Can not find the avaliable node",
				err)
			return

		}
		controller.WriteError(httpResponse,
			"330000",
			"node",
			result,
			err)
		return

	}
	controller.WriteResultInfo(httpResponse, "node", "", nil)

	return
}