package models
|
|
import (
|
"basic.com/valib/logger.git"
|
)
|
|
const (
|
IsAlive_StatusNone = 0
|
IsAlive_StatusAlive = 1
|
IsAlive_StatusLeaving = 2
|
IsAlive_StatusLeft = 3
|
IsAlive_StatusFailed = 4
|
)
|
|
type Node struct {
|
Id string `gorm:"primary_key;column:id" json:"id"`
|
ClusterId string `gorm:"column:cluster_id" json:"cluster_id"`
|
NodeName string `gorm:"column:node_name" json:"node_name"`
|
NodeId string `gorm:"column:node_id" json:"node_id"`
|
NodeIp string `gorm:"column:node_ip" json:"node_ip"`
|
CreateTime string `gorm:"column:create_time" json:"create_time"`
|
IsDelete bool `gorm:"column:isDelete;default:0" json:"isDelete"`
|
DeviceType string `gorm:"column:device_type" json:"device_type"` //设备型号`
|
DriftState string `gorm:"column:drift_state" json:"drift_state"` //漂移状态, master,backup
|
Online bool `gorm:"column:online;default:1" json:"online"` //在线状态
|
}
|
|
func (Node) TableName() string {
|
return "cluster_node"
|
}
|
|
func (n *Node) FindIpByNode(nodeId string) (string, error) {
|
node := Node{}
|
if err := db.Raw("select id, node_ip from cluster_node where isDelete=0 and id = '" + nodeId + "'").First(&node).Error; err != nil {
|
return "", err
|
}
|
return node.NodeIp, nil
|
}
|
|
func (n *Node) FindNodesByClusterId(clusterId string) (nodes []Node, err error) {
|
if err = db.Raw("select * from cluster_node where isDelete=0 and cluster_id=?", clusterId).Scan(&nodes).Error; err != nil {
|
return nil, err
|
}
|
return nodes, nil
|
}
|
|
func (n *Node) FindNodes() (nodes []Node, err error) {
|
if err = db.Raw("select * from cluster_node").Scan(&nodes).Error; err != nil {
|
return nil, err
|
}
|
return nodes, nil
|
}
|
|
func (n *Node) FindFirstNode() (node Node, err error) {
|
if err = db.Raw("select * from cluster_node where isDelete=0 order by create_time limit 1").Scan(&node).Error; err != nil {
|
return node, err
|
}
|
return node, nil
|
}
|
|
func (n *Node) FindNodeById(id string) (node Node, err error) {
|
if err = db.Raw("select * from cluster_node where id=?", id).Scan(&node).Error; err != nil {
|
return node, err
|
}
|
return node, nil
|
}
|
|
func (n *Node) UpdateDriftStateByNodeId(driftState string, nodeId string, sync bool) bool {
|
var err error
|
tx := GetDB().Begin()
|
if !sync {
|
GetDB().LogMode(false)
|
defer db.LogMode(true)
|
}
|
|
defer func() {
|
if err != nil && tx != nil {
|
logger.Error("updateDriftState err:", err)
|
tx.Rollback()
|
}
|
}()
|
if driftState == "master" {
|
if err = tx.Exec("update "+n.TableName()+" set drift_state=? where id=?", driftState, nodeId).Error; err != nil {
|
return false
|
}
|
if err = tx.Exec("update "+n.TableName()+" set drift_state='slave' where id !=?", nodeId).Error; err != nil {
|
return false
|
}
|
} else {
|
if err = tx.Exec("update "+n.TableName()+" set drift_state=? where id=?", driftState, nodeId).Error; err != nil {
|
return false
|
}
|
}
|
|
tx.Commit()
|
return true
|
}
|