Просмотр исходного кода

use only checkin status on old nodes

abhishek9686 9 месяцев назад
Родитель
Сommit
757312390c
7 измененных файлов с 77 добавлено и 42 удалено
  1. 1 0
      controllers/node.go
  2. 7 1
      logic/nodes.go
  3. 1 1
      logic/status.go
  4. 28 1
      logic/util.go
  5. 0 3
      mq/migrate.go
  6. 1 29
      mq/util.go
  7. 39 7
      pro/logic/status.go

+ 1 - 0
controllers/node.go

@@ -326,6 +326,7 @@ func getNetworkNodes(w http.ResponseWriter, r *http.Request) {
 	if len(filteredNodes) > 0 {
 		nodes = filteredNodes
 	}
+
 	nodes = logic.AddStaticNodestoList(nodes)
 	nodes = logic.AddStatusToNodes(nodes)
 	// returns all the nodes in JSON/API format

+ 7 - 1
logic/nodes.go

@@ -446,8 +446,14 @@ func AddStaticNodestoList(nodes []models.Node) []models.Node {
 }
 
 func AddStatusToNodes(nodes []models.Node) (nodesWithStatus []models.Node) {
+	aclDefaultPolicyStatusMap := make(map[string]bool)
 	for _, node := range nodes {
-		GetNodeStatus(&node)
+		if _, ok := aclDefaultPolicyStatusMap[node.Network]; !ok {
+			// check default policy if all allowed return true
+			defaultPolicy, _ := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
+			aclDefaultPolicyStatusMap[node.Network] = defaultPolicy.Enabled
+		}
+		GetNodeStatus(&node, aclDefaultPolicyStatusMap[node.Network])
 		nodesWithStatus = append(nodesWithStatus, node)
 	}
 	return

+ 1 - 1
logic/status.go

@@ -8,7 +8,7 @@ import (
 
 var GetNodeStatus = getNodeStatus
 
-func getNodeStatus(node *models.Node) {
+func getNodeStatus(node *models.Node, t bool) {
 	// On CE check only last check-in time
 	if node.IsStatic {
 		if !node.StaticNode.Enabled {

+ 28 - 1
logic/util.go

@@ -6,11 +6,14 @@ import (
 	"encoding/base32"
 	"encoding/base64"
 	"encoding/json"
+	"fmt"
 	"net"
 	"os"
 	"strings"
 	"time"
+	"unicode"
 
+	"github.com/blang/semver"
 	"github.com/c-robinson/iplib"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logger"
@@ -148,4 +151,28 @@ func IsSlicesEqual(a, b []string) bool {
 	return true
 }
 
-// == private ==
+// VersionLessThan checks if v1 < v2 semantically
+// dev is the latest version
+func VersionLessThan(v1, v2 string) (bool, error) {
+	if v1 == "dev" {
+		return false, nil
+	}
+	if v2 == "dev" {
+		return true, nil
+	}
+	semVer1 := strings.TrimFunc(v1, func(r rune) bool {
+		return !unicode.IsNumber(r)
+	})
+	semVer2 := strings.TrimFunc(v2, func(r rune) bool {
+		return !unicode.IsNumber(r)
+	})
+	sv1, err := semver.Parse(semVer1)
+	if err != nil {
+		return false, fmt.Errorf("failed to parse semver1 (%s): %w", semVer1, err)
+	}
+	sv2, err := semver.Parse(semVer2)
+	if err != nil {
+		return false, fmt.Errorf("failed to parse semver2 (%s): %w", semVer2, err)
+	}
+	return sv1.LT(sv2), nil
+}

+ 0 - 3
mq/migrate.go

@@ -93,9 +93,6 @@ func SendPullSYN() error {
 			return err
 		}
 		encrypted, encryptErr := encryptAESGCM(host.TrafficKeyPublic[0:32], zipped)
-		if encryptErr != nil {
-			return encryptErr
-		}
 
 		if encryptErr != nil {
 			continue

+ 1 - 29
mq/util.go

@@ -12,9 +12,7 @@ import (
 	"math"
 	"strings"
 	"time"
-	"unicode"
 
-	"github.com/blang/semver"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/ncutils"
@@ -139,7 +137,7 @@ func publish(host *models.Host, dest string, msg []byte) error {
 
 	var encrypted []byte
 	var encryptErr error
-	vlt, err := versionLessThan(host.Version, "v0.30.0")
+	vlt, err := logic.VersionLessThan(host.Version, "v0.30.0")
 	if err != nil {
 		slog.Warn("error checking version less than", "error", err)
 		return err
@@ -187,29 +185,3 @@ func GetID(topic string) (string, error) {
 	//the last part of the topic will be the node.ID
 	return parts[count-1], nil
 }
-
-// versionLessThan checks if v1 < v2 semantically
-// dev is the latest version
-func versionLessThan(v1, v2 string) (bool, error) {
-	if v1 == "dev" {
-		return false, nil
-	}
-	if v2 == "dev" {
-		return true, nil
-	}
-	semVer1 := strings.TrimFunc(v1, func(r rune) bool {
-		return !unicode.IsNumber(r)
-	})
-	semVer2 := strings.TrimFunc(v2, func(r rune) bool {
-		return !unicode.IsNumber(r)
-	})
-	sv1, err := semver.Parse(semVer1)
-	if err != nil {
-		return false, fmt.Errorf("failed to parse semver1 (%s): %w", semVer1, err)
-	}
-	sv2, err := semver.Parse(semVer2)
-	if err != nil {
-		return false, fmt.Errorf("failed to parse semver2 (%s): %w", semVer2, err)
-	}
-	return sv1.LT(sv2), nil
-}

+ 39 - 7
pro/logic/status.go

@@ -7,7 +7,25 @@ import (
 	"github.com/gravitl/netmaker/models"
 )
 
-func GetNodeStatus(node *models.Node) {
+func getNodeStatusOld(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
+	}
+	node.Status = models.OnlineSt
+}
+
+func GetNodeStatus(node *models.Node, defaultEnabledPolicy bool) {
+
 	if time.Since(node.LastCheckIn) > models.LastCheckInThreshold {
 		node.Status = models.OfflineSt
 		return
@@ -35,6 +53,20 @@ func GetNodeStatus(node *models.Node) {
 		node.Status = models.UnKnown
 		return
 	}
+	host, err := logic.GetHost(node.HostID.String())
+	if err != nil {
+		node.Status = models.UnKnown
+		return
+	}
+	vlt, err := logic.VersionLessThan(host.Version, "v0.30.0")
+	if err != nil {
+		node.Status = models.UnKnown
+		return
+	}
+	if vlt {
+		getNodeStatusOld(node)
+		return
+	}
 	metrics, err := logic.GetMetrics(node.ID.String())
 	if err != nil {
 		return
@@ -80,11 +112,11 @@ func GetNodeStatus(node *models.Node) {
 	// 	}
 
 	// }
-	checkPeerConnectivity(node, metrics)
+	checkPeerConnectivity(node, metrics, defaultEnabledPolicy)
 
 }
 
-func checkPeerStatus(node *models.Node) {
+func checkPeerStatus(node *models.Node, defaultAclPolicy bool) {
 	peerNotConnectedCnt := 0
 	metrics, err := logic.GetMetrics(node.ID.String())
 	if err != nil {
@@ -101,7 +133,7 @@ func checkPeerStatus(node *models.Node) {
 		if err != nil {
 			continue
 		}
-		if !logic.IsNodeAllowedToCommunicate(*node, peer) {
+		if !defaultAclPolicy && !logic.IsNodeAllowedToCommunicate(*node, peer, false) {
 			continue
 		}
 
@@ -128,14 +160,14 @@ func checkPeerStatus(node *models.Node) {
 	node.Status = models.WarningSt
 }
 
-func checkPeerConnectivity(node *models.Node, metrics *models.Metrics) {
+func checkPeerConnectivity(node *models.Node, metrics *models.Metrics, defaultAclPolicy bool) {
 	peerNotConnectedCnt := 0
 	for peerID, metric := range metrics.Connectivity {
 		peer, err := logic.GetNodeByID(peerID)
 		if err != nil {
 			continue
 		}
-		if !logic.IsNodeAllowedToCommunicate(*node, peer) {
+		if !defaultAclPolicy && !logic.IsNodeAllowedToCommunicate(*node, peer, false) {
 			continue
 		}
 
@@ -146,7 +178,7 @@ func checkPeerConnectivity(node *models.Node, metrics *models.Metrics) {
 			continue
 		}
 		// check if peer is in error state
-		checkPeerStatus(&peer)
+		checkPeerStatus(&peer, defaultAclPolicy)
 		if peer.Status == models.ErrorSt {
 			continue
 		}