zhangzengfei
2023-09-05 63645d248c765244488cd34dbc1bb6528ca6b7c7
system-service/models/node.go
@@ -1,70 +1,70 @@
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
}
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
}