metrics.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package logic
  2. import (
  3. "encoding/json"
  4. "github.com/gravitl/netmaker/database"
  5. "github.com/gravitl/netmaker/models"
  6. )
  7. // GetMetrics - gets the metrics
  8. func GetMetrics(nodeid string) (*models.Metrics, error) {
  9. var metrics models.Metrics
  10. record, err := database.FetchRecord(database.METRICS_TABLE_NAME, nodeid)
  11. if err != nil {
  12. if database.IsEmptyRecord(err) {
  13. return &metrics, nil
  14. }
  15. return &metrics, err
  16. }
  17. err = json.Unmarshal([]byte(record), &metrics)
  18. if err != nil {
  19. return &metrics, err
  20. }
  21. return &metrics, nil
  22. }
  23. // UpdateMetrics - updates the metrics of a given client
  24. func UpdateMetrics(nodeid string, metrics *models.Metrics) error {
  25. data, err := json.Marshal(metrics)
  26. if err != nil {
  27. return err
  28. }
  29. return database.Insert(nodeid, string(data), database.METRICS_TABLE_NAME)
  30. }
  31. // DeleteMetrics - deletes metrics of a given node
  32. func DeleteMetrics(nodeid string) error {
  33. return database.DeleteRecord(database.METRICS_TABLE_NAME, nodeid)
  34. }
  35. // CollectServerMetrics - collects metrics for given server node
  36. func CollectServerMetrics(serverID string, networkNodes []models.Node) *models.Metrics {
  37. newServerMetrics := models.Metrics{}
  38. newServerMetrics.Connectivity = make(map[string]models.Metric)
  39. for i := range networkNodes {
  40. currNodeID := networkNodes[i].ID
  41. if currNodeID == serverID {
  42. continue
  43. }
  44. if currMetrics, err := GetMetrics(currNodeID); err == nil {
  45. if currMetrics.Connectivity != nil && currMetrics.Connectivity[serverID].Connected {
  46. metrics := currMetrics.Connectivity[serverID]
  47. metrics.NodeName = networkNodes[i].Name
  48. metrics.IsServer = "no"
  49. newServerMetrics.Connectivity[currNodeID] = metrics
  50. }
  51. } else {
  52. newServerMetrics.Connectivity[currNodeID] = models.Metric{
  53. Connected: false,
  54. Latency: 999,
  55. }
  56. }
  57. }
  58. return &newServerMetrics
  59. }