|
@@ -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
|