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 } 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) UpdateDriftStateByNodeId(driftState string, nodeId string) bool { var err error tx := GetDB().Begin() 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='backup' 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 }