Skip to content

Commit

Permalink
handle static node status
Browse files Browse the repository at this point in the history
  • Loading branch information
abhishek9686 committed Nov 21, 2024
1 parent 87f35f1 commit 079b2ae
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 2 deletions.
12 changes: 11 additions & 1 deletion logic/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions models/api_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}

Expand Down
1 change: 1 addition & 0 deletions models/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions pro/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
30 changes: 29 additions & 1 deletion pro/logic/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 079b2ae

Please sign in to comment.