Prechádzať zdrojové kódy

add restricted status

abhishek9686 7 mesiacov pred
rodič
commit
ae0787f5f7
2 zmenil súbory, kde vykonal 26 pridanie a 5 odobranie
  1. 6 5
      models/node.go
  2. 20 0
      pro/logic/status.go

+ 6 - 5
models/node.go

@@ -14,11 +14,12 @@ import (
 type NodeStatus string
 
 const (
-	OnlineSt  NodeStatus = "online"
-	OfflineSt NodeStatus = "offline"
-	WarningSt NodeStatus = "warning"
-	ErrorSt   NodeStatus = "error"
-	UnKnown   NodeStatus = "unknown"
+	OnlineSt     NodeStatus = "online"
+	OfflineSt    NodeStatus = "offline"
+	WarningSt    NodeStatus = "warning"
+	ErrorSt      NodeStatus = "error"
+	UnKnown      NodeStatus = "unknown"
+	RestrictedSt NodeStatus = "restricted"
 )
 
 // LastCheckInThreshold - if node's checkin more than this threshold,then node is declared as offline

+ 20 - 0
pro/logic/status.go

@@ -31,12 +31,25 @@ func GetNodeStatus(node *models.Node, defaultEnabledPolicy bool) {
 			node.Status = models.OfflineSt
 			return
 		}
+		ingNode, err := logic.GetNodeByID(node.StaticNode.IngressGatewayID)
+		if err != nil {
+			node.Status = models.OfflineSt
+			return
+		}
+		if !defaultEnabledPolicy {
+			allowed, _ := logic.IsNodeAllowedToCommunicate(*node, ingNode, false)
+			if !allowed {
+				node.Status = models.RestrictedSt
+				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
@@ -46,6 +59,7 @@ func GetNodeStatus(node *models.Node, defaultEnabledPolicy bool) {
 				return
 			}
 		}
+
 		node.Status = models.UnKnown
 		return
 	}
@@ -170,6 +184,7 @@ func checkPeerStatus(node *models.Node, defaultAclPolicy bool) {
 
 func checkPeerConnectivity(node *models.Node, metrics *models.Metrics, defaultAclPolicy bool) {
 	peerNotConnectedCnt := 0
+	peerNotAllowed := 0
 	for peerID, metric := range metrics.Connectivity {
 		peer, err := logic.GetNodeByID(peerID)
 		if err != nil {
@@ -179,6 +194,7 @@ func checkPeerConnectivity(node *models.Node, metrics *models.Metrics, defaultAc
 		if !defaultAclPolicy {
 			allowed, _ := logic.IsNodeAllowedToCommunicate(*node, peer, false)
 			if !allowed {
+				peerNotAllowed++
 				continue
 			}
 		}
@@ -197,6 +213,10 @@ func checkPeerConnectivity(node *models.Node, metrics *models.Metrics, defaultAc
 		peerNotConnectedCnt++
 
 	}
+	if peerNotAllowed == len(metrics.Connectivity) {
+		node.Status = models.RestrictedSt
+		return
+	}
 	if peerNotConnectedCnt > len(metrics.Connectivity)/2 {
 		node.Status = models.WarningSt
 		return