| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | package logicimport (	"encoding/json"	"github.com/gravitl/netmaker/database"	"github.com/gravitl/netmaker/models")// GetMetrics - gets the metricsfunc GetMetrics(nodeid string) (*models.Metrics, error) {	var metrics models.Metrics	record, err := database.FetchRecord(database.METRICS_TABLE_NAME, nodeid)	if err != nil {		if database.IsEmptyRecord(err) {			return &metrics, nil		}		return &metrics, err	}	err = json.Unmarshal([]byte(record), &metrics)	if err != nil {		return &metrics, err	}	return &metrics, nil}// UpdateMetrics - updates the metrics of a given clientfunc UpdateMetrics(nodeid string, metrics *models.Metrics) error {	data, err := json.Marshal(metrics)	if err != nil {		return err	}	return database.Insert(nodeid, string(data), database.METRICS_TABLE_NAME)}// DeleteMetrics - deletes metrics of a given nodefunc DeleteMetrics(nodeid string) error {	return database.DeleteRecord(database.METRICS_TABLE_NAME, nodeid)}// CollectServerMetrics - collects metrics for given server nodefunc CollectServerMetrics(serverID string, networkNodes []models.Node) *models.Metrics {	newServerMetrics := models.Metrics{}	newServerMetrics.Connectivity = make(map[string]models.Metric)	for i := range networkNodes {		currNodeID := networkNodes[i].ID		if currNodeID == serverID {			continue		}		if currMetrics, err := GetMetrics(currNodeID); err == nil {			if currMetrics.Connectivity != nil && currMetrics.Connectivity[serverID].Connected {				metrics := currMetrics.Connectivity[serverID]				metrics.NodeName = networkNodes[i].Name				metrics.IsServer = "no"				newServerMetrics.Connectivity[currNodeID] = metrics			}		} else {			newServerMetrics.Connectivity[currNodeID] = models.Metric{				Connected: false,				Latency:   999,			}		}	}	return &newServerMetrics}
 |