diff --git a/logic/nodes.go b/logic/nodes.go index 3e8a5f84..f68602a7 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -52,6 +52,16 @@ func GetNetworkNodesMemory(allNodes []models.Node, network string) []models.Node return nodes } +// UpdateNodeCheckin - updates the checkin time of a node +func UpdateNodeCheckin(node *models.Node) error { + node.SetLastCheckIn() + data, err := json.Marshal(node) + if err != nil { + return err + } + return database.Insert(node.ID.String(), string(data), database.NODES_TABLE_NAME) +} + // UpdateNode - takes a node and updates another node with it's values func UpdateNode(currentNode *models.Node, newNode *models.Node) error { if newNode.Address.IP.String() != currentNode.Address.IP.String() { diff --git a/mq/handlers.go b/mq/handlers.go index 4b53743c..dfe654f3 100644 --- a/mq/handlers.go +++ b/mq/handlers.go @@ -382,8 +382,7 @@ func handleHostCheckin(h, currentHost *models.Host) bool { } continue } - node.SetLastCheckIn() - if err := logic.UpdateNode(&node, &node); err != nil { + if err := logic.UpdateNodeCheckin(&node); err != nil { logger.Log(0, "error updating node", node.ID.String(), " on checkin", err.Error()) } } @@ -391,13 +390,16 @@ func handleHostCheckin(h, currentHost *models.Host) bool { for i := range h.Interfaces { h.Interfaces[i].AddressString = h.Interfaces[i].Address.String() } - h.HostPass = currentHost.HostPass - if err := logic.UpsertHost(h); err != nil { + ifaceDelta := len(h.Interfaces) != len(currentHost.Interfaces) || !h.EndpointIP.Equal(currentHost.EndpointIP) + currentHost.EndpointIP = h.EndpointIP + currentHost.Interfaces = h.Interfaces + currentHost.DefaultInterface = h.DefaultInterface + if err := logic.UpsertHost(currentHost); err != nil { logger.Log(0, "failed to update host after check-in", h.Name, h.ID.String(), err.Error()) return false } - logger.Log(3, "ping processed for host", h.Name, h.ID.String()) - return len(h.Interfaces) != len(currentHost.Interfaces) || - !h.EndpointIP.Equal(currentHost.EndpointIP) + logger.Log(0, "ping processed for host", h.Name, h.ID.String()) + return ifaceDelta + }