|
@@ -46,6 +46,28 @@ func DeleteMetrics(nodeid string) error {
|
|
|
return database.DeleteRecord(database.METRICS_TABLE_NAME, nodeid)
|
|
|
}
|
|
|
|
|
|
+// MQUpdateMetricsFallBack - called when mq fallback thread is triggered on client
|
|
|
+func MQUpdateMetricsFallBack(nodeid string, newMetrics models.Metrics) {
|
|
|
+
|
|
|
+ currentNode, err := logic.GetNodeByID(nodeid)
|
|
|
+ if err != nil {
|
|
|
+ slog.Error("error getting node", "id", nodeid, "error", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ updateNodeMetrics(¤tNode, &newMetrics)
|
|
|
+ if err = logic.UpdateMetrics(nodeid, &newMetrics); err != nil {
|
|
|
+ slog.Error("failed to update node metrics", "id", nodeid, "error", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if servercfg.IsMetricsExporter() {
|
|
|
+ if err := mq.PushMetricsToExporter(newMetrics); err != nil {
|
|
|
+ slog.Error("failed to push node metrics to exporter", "id", currentNode.ID, "error", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ slog.Debug("updated node metrics", "id", nodeid)
|
|
|
+}
|
|
|
+
|
|
|
func MQUpdateMetrics(client mqtt.Client, msg mqtt.Message) {
|
|
|
id, err := mq.GetID(msg.Topic())
|
|
|
if err != nil {
|
|
@@ -68,9 +90,7 @@ func MQUpdateMetrics(client mqtt.Client, msg mqtt.Message) {
|
|
|
slog.Error("error unmarshaling payload", "error", err)
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- shouldUpdate := updateNodeMetrics(¤tNode, &newMetrics)
|
|
|
-
|
|
|
+ updateNodeMetrics(¤tNode, &newMetrics)
|
|
|
if err = logic.UpdateMetrics(id, &newMetrics); err != nil {
|
|
|
slog.Error("failed to update node metrics", "id", id, "error", err)
|
|
|
return
|
|
@@ -80,34 +100,15 @@ func MQUpdateMetrics(client mqtt.Client, msg mqtt.Message) {
|
|
|
slog.Error("failed to push node metrics to exporter", "id", currentNode.ID, "error", err)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if shouldUpdate {
|
|
|
- slog.Info("updating peers after node detected connectivity issues", "id", currentNode.ID, "network", currentNode.Network)
|
|
|
- host, err := logic.GetHost(currentNode.HostID.String())
|
|
|
- if err == nil {
|
|
|
- nodes, err := logic.GetAllNodes()
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
- if err = mq.PublishSingleHostPeerUpdate(host, nodes, nil, nil, false); err != nil {
|
|
|
- slog.Warn("failed to publish update after failover peer change for node", "id", currentNode.ID, "network", currentNode.Network, "error", err)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
slog.Debug("updated node metrics", "id", id)
|
|
|
}
|
|
|
|
|
|
-func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) bool {
|
|
|
- if newMetrics.FailoverPeers == nil {
|
|
|
- newMetrics.FailoverPeers = make(map[string]string)
|
|
|
- }
|
|
|
+func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) {
|
|
|
+
|
|
|
oldMetrics, err := logic.GetMetrics(currentNode.ID.String())
|
|
|
if err != nil {
|
|
|
slog.Error("error finding old metrics for node", "id", currentNode.ID, "error", err)
|
|
|
- return false
|
|
|
- }
|
|
|
- if oldMetrics.FailoverPeers == nil {
|
|
|
- oldMetrics.FailoverPeers = make(map[string]string)
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
var attachedClients []models.ExtClient
|
|
@@ -164,19 +165,7 @@ func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) boo
|
|
|
|
|
|
}
|
|
|
|
|
|
- shouldUpdate := len(oldMetrics.FailoverPeers) == 0 && len(newMetrics.FailoverPeers) > 0
|
|
|
- for k, v := range oldMetrics.FailoverPeers {
|
|
|
- if len(newMetrics.FailoverPeers[k]) > 0 && len(v) == 0 {
|
|
|
- shouldUpdate = true
|
|
|
- }
|
|
|
-
|
|
|
- if len(v) > 0 && len(newMetrics.FailoverPeers[k]) == 0 {
|
|
|
- newMetrics.FailoverPeers[k] = v
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
for k := range oldMetrics.Connectivity { // cleanup any left over data, self healing
|
|
|
delete(newMetrics.Connectivity, k)
|
|
|
}
|
|
|
- return shouldUpdate
|
|
|
}
|