metrics.go 884 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package metrics
  2. import (
  3. "encoding/json"
  4. "os"
  5. "sync"
  6. "time"
  7. )
  8. /*
  9. 1. Create metrics packet--> packet with identifier to track latency, errors.
  10. */
  11. type Metric struct {
  12. LastRecordedLatency uint64
  13. ConnectionStatus bool
  14. TrafficSent float64
  15. TrafficRecieved float64
  16. }
  17. type MetricsPayload struct {
  18. MetricType MetricsUpdateType
  19. Value interface{}
  20. }
  21. type MetricsUpdateType uint32
  22. const (
  23. LatencyUpdate MetricsUpdateType = 1
  24. TrafficSentUpdate MetricsUpdateType = 2
  25. TrafficRecievedUpdate MetricsUpdateType = 3
  26. )
  27. var MetricsMapLock = &sync.RWMutex{}
  28. var MetricsMap = make(map[string]Metric)
  29. func init() {
  30. go func() {
  31. for {
  32. time.Sleep(1 * time.Minute)
  33. PrintMetrics()
  34. }
  35. }()
  36. }
  37. func PrintMetrics() {
  38. data, err := json.MarshalIndent(MetricsMap, "", " ")
  39. if err != nil {
  40. return
  41. }
  42. os.WriteFile("/tmp/metrics.json", data, 0755)
  43. }