Files
2019-08-08 17:13:34 +08:00

133 lines
3.6 KiB
Go

package main
import (
"net/http"
"strconv"
"strings"
"time"
"github.com/julienschmidt/httprouter"
"github.com/snail007/go-activerecord/mysql"
)
type Cluster struct{}
func NewCluster() *Cluster {
return &Cluster{}
}
//report a cluster status
//method : POST
//params : sys_conn_number,bandwidth,tunnel_conn_number
func (this *Cluster) Report(responseWrite http.ResponseWriter, request *http.Request, params httprouter.Params) {
_sysConn := request.PostFormValue("sys_conn_number")
sysConn, err := strconv.Atoi(_sysConn)
if err != nil {
jsonError(responseWrite, "sys_conn_number is error!", nil)
return
}
_bandwidth := request.PostFormValue("bandwidth")
bandwidth, err := strconv.Atoi(_bandwidth)
if err != nil {
jsonError(responseWrite, "bandwidth is error!", nil)
return
}
_tunnelConn := request.PostFormValue("tunnel_conn_number")
tunnelConn, err := strconv.Atoi(_tunnelConn)
if err != nil {
jsonError(responseWrite, "tunnel_conn_number is error!", nil)
return
}
addr := request.RemoteAddr
ip := addr[0:strings.Index(addr, ":")]
clusterValue := map[string]interface{}{
"ip": ip,
"system_conn_number": sysConn,
"tunnel_conn_number": tunnelConn,
"bandwidth": bandwidth,
}
where := map[string]interface{}{
"ip": ip,
"is_delete": 0,
}
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("cluster").Where(where))
if err != nil {
jsonError(responseWrite, err.Error(), nil)
log.Warnf("Cluster Report ERR:%s", err)
return
}
if rs.Len() > 0 {
clusterValue["update_time"] = time.Now().Unix()
_, err = db.Exec(db.AR().Update("cluster", clusterValue, where))
} else {
clusterValue["create_time"] = time.Now().Unix()
_, err = db.Exec(db.AR().Insert("cluster", clusterValue))
}
if err != nil {
jsonError(responseWrite, err.Error(), nil)
log.Warnf("Cluster Report ERR:%s", err)
return
}
responseWrite.WriteHeader(http.StatusNoContent)
}
//cluster list
//method : POST
//params : sys_conn_number,bandwidth,tunnel_conn_number
func (this *Cluster) List(responseWrite http.ResponseWriter, request *http.Request, params httprouter.Params) {
_sysConn := request.PostFormValue("sys_conn_number")
sysConn, err := strconv.Atoi(_sysConn)
if err != nil {
jsonError(responseWrite, "sys_conn_number is error!", nil)
return
}
_bandwidth := request.PostFormValue("bandwidth")
bandwidth, err := strconv.Atoi(_bandwidth)
if err != nil {
jsonError(responseWrite, "bandwidth is error!", nil)
return
}
_tunnelConn := request.PostFormValue("tunnel_conn_number")
tunnelConn, err := strconv.Atoi(_tunnelConn)
if err != nil {
jsonError(responseWrite, "tunnel_conn_number is error!", nil)
return
}
addr := request.RemoteAddr
ip := addr[0:strings.Index(addr, ":")]
clusterValue := map[string]interface{}{
"ip": ip,
"system_conn_number": sysConn,
"tunnel_conn_number": tunnelConn,
"bandwidth": bandwidth,
}
where := map[string]interface{}{
"ip": ip,
"is_delete": 0,
}
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("cluster").Where(where))
if err != nil {
jsonError(responseWrite, err.Error(), nil)
log.Warnf("Cluster Report ERR:%s", err)
return
}
if rs.Len() > 0 {
clusterValue["update_time"] = time.Now().Unix()
_, err = db.Exec(db.AR().Update("cluster", clusterValue, where))
} else {
clusterValue["create_time"] = time.Now().Unix()
_, err = db.Exec(db.AR().Insert("cluster", clusterValue))
}
if err != nil {
jsonError(responseWrite, err.Error(), nil)
log.Warnf("Cluster Report ERR:%s", err)
return
}
responseWrite.WriteHeader(http.StatusNoContent)
}