瀏覽代碼

handle static node status

abhishek9686 9 月之前
父節點
當前提交
079b2aef59
共有 5 個文件被更改,包括 44 次插入2 次删除
  1. 11 1
      logic/status.go
  2. 2 0
      models/api_node.go
  3. 1 0
      models/node.go
  4. 1 0
      pro/initialize.go
  5. 29 1
      pro/logic/status.go

+ 11 - 1
logic/status.go

@@ -6,8 +6,18 @@ import (
 	"github.com/gravitl/netmaker/models"
 )
 
-func GetNodeStatus(node *models.Node) {
+var GetNodeStatus = getNodeStatus
+
+func getNodeStatus(node *models.Node) {
 	// On CE check only last check-in time
+	if node.IsStatic {
+		if !node.StaticNode.Enabled {
+			node.Status = models.OfflineSt
+			return
+		}
+		node.Status = models.OnlineSt
+		return
+	}
 	if time.Since(node.LastCheckIn) > time.Minute*10 {
 		node.Status = models.OfflineSt
 		return

+ 2 - 0
models/api_node.go

@@ -52,6 +52,7 @@ type ApiNode struct {
 	IsStatic          bool                `json:"is_static"`
 	IsUserNode        bool                `json:"is_user_node"`
 	StaticNode        ExtClient           `json:"static_node"`
+	Status            NodeStatus          `json:"status"`
 }
 
 // ApiNode.ConvertToServerNode - converts an api node to a server node
@@ -192,6 +193,7 @@ func (nm *Node) ConvertToAPINode() *ApiNode {
 	apiNode.IsStatic = nm.IsStatic
 	apiNode.IsUserNode = nm.IsUserNode
 	apiNode.StaticNode = nm.StaticNode
+	apiNode.Status = nm.Status
 	return &apiNode
 }
 

+ 1 - 0
models/node.go

@@ -18,6 +18,7 @@ const (
 	OfflineSt NodeStatus = "offline"
 	WarningSt NodeStatus = "warning"
 	ErrorSt   NodeStatus = "error"
+	UnKnown   NodeStatus = "unknown"
 )
 
 // LastCheckInThreshold - if node's checkin more than this threshold,then node is declared as offline

+ 1 - 0
pro/initialize.go

@@ -140,6 +140,7 @@ func InitPro() {
 	logic.IntialiseGroups = proLogic.UserGroupsInit
 	logic.AddGlobalNetRolesToAdmins = proLogic.AddGlobalNetRolesToAdmins
 	logic.GetUserGroupsInNetwork = proLogic.GetUserGroupsInNetwork
+	logic.GetNodeStatus = proLogic.GetNodeStatus
 }
 
 func retrieveProLogo() string {

+ 29 - 1
pro/logic/status.go

@@ -8,15 +8,43 @@ import (
 )
 
 func GetNodeStatus(node *models.Node) {
-	// On CE check only last check-in time
 	if time.Since(node.LastCheckIn) > models.LastCheckInThreshold {
 		node.Status = models.OfflineSt
 		return
 	}
+	if node.IsStatic {
+		if !node.StaticNode.Enabled {
+			node.Status = models.OfflineSt
+			return
+		}
+		// check extclient connection from metrics
+		ingressMetrics, err := GetMetrics(node.StaticNode.IngressGatewayID)
+		if err != nil || ingressMetrics == nil || ingressMetrics.Connectivity == nil {
+			node.Status = models.UnKnown
+			return
+		}
+		if metric, ok := ingressMetrics.Connectivity[node.StaticNode.ClientID]; ok {
+			if metric.Connected {
+				node.Status = models.OnlineSt
+				return
+			} else {
+				node.Status = models.OfflineSt
+				return
+			}
+		}
+		node.Status = models.UnKnown
+		return
+	}
 	metrics, err := logic.GetMetrics(node.ID.String())
 	if err != nil {
 		return
 	}
+	if metrics == nil || metrics.Connectivity == nil {
+		if time.Since(node.LastCheckIn) < models.LastCheckInThreshold {
+			node.Status = models.OnlineSt
+			return
+		}
+	}
 	peerNotConnectedCnt := 0
 	for peerID, metric := range metrics.Connectivity {
 		peer, err := logic.GetNodeByID(peerID)