metrics.go 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package models
  2. import (
  3. "time"
  4. )
  5. // Metrics - metrics struct
  6. type Metrics struct {
  7. Network string `json:"network" bson:"network" yaml:"network"`
  8. NodeID string `json:"node_id" bson:"node_id" yaml:"node_id"`
  9. NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"`
  10. Connectivity map[string]Metric `json:"connectivity" bson:"connectivity" yaml:"connectivity"`
  11. UpdatedAt time.Time `json:"updated_at" bson:"updated_at" yaml:"updated_at"`
  12. }
  13. // Metric - holds a metric for data between nodes
  14. type Metric struct {
  15. NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"`
  16. Uptime int64 `json:"uptime" bson:"uptime" yaml:"uptime" swaggertype:"primitive,integer" format:"int64"`
  17. TotalTime int64 `json:"totaltime" bson:"totaltime" yaml:"totaltime" swaggertype:"primitive,integer" format:"int64"`
  18. Latency int64 `json:"latency" bson:"latency" yaml:"latency" swaggertype:"primitive,integer" format:"int64"`
  19. TotalReceived int64 `json:"totalreceived" bson:"totalreceived" yaml:"totalreceived" swaggertype:"primitive,integer" format:"int64"`
  20. LastTotalReceived int64 `json:"lasttotalreceived" bson:"lasttotalreceived" yaml:"lasttotalreceived" swaggertype:"primitive,integer" format:"int64"`
  21. TotalSent int64 `json:"totalsent" bson:"totalsent" yaml:"totalsent" swaggertype:"primitive,integer" format:"int64"`
  22. LastTotalSent int64 `json:"lasttotalsent" bson:"lasttotalsent" yaml:"lasttotalsent" swaggertype:"primitive,integer" format:"int64"`
  23. ActualUptime time.Duration `json:"actualuptime" swaggertype:"primitive,integer" format:"int64" bson:"actualuptime" yaml:"actualuptime"`
  24. PercentUp float64 `json:"percentup" bson:"percentup" yaml:"percentup"`
  25. Connected bool `json:"connected" bson:"connected" yaml:"connected"`
  26. }
  27. // IDandAddr - struct to hold ID and primary Address
  28. type IDandAddr struct {
  29. ID string `json:"id" bson:"id" yaml:"id"`
  30. HostID string `json:"host_id"`
  31. Address string `json:"address" bson:"address" yaml:"address"`
  32. Name string `json:"name" bson:"name" yaml:"name"`
  33. IsServer string `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"`
  34. Network string `json:"network" bson:"network" yaml:"network" validate:"network"`
  35. ListenPort int `json:"listen_port" yaml:"listen_port"`
  36. IsExtClient bool `json:"is_extclient"`
  37. }
  38. // HostInfoMap - map of host public keys to host networking info
  39. type HostInfoMap map[string]HostNetworkInfo
  40. // HostNetworkInfo - holds info related to host networking (used for client side peer calculations)
  41. type HostNetworkInfo struct {
  42. Interfaces []Iface `json:"interfaces" yaml:"interfaces"`
  43. ListenPort int `json:"listen_port" yaml:"listen_port"`
  44. IsStaticPort bool `json:"is_static_port"`
  45. IsStatic bool `json:"is_static"`
  46. Version string `json:"version"`
  47. }
  48. // PeerMap - peer map for ids and addresses in metrics
  49. type PeerMap map[string]IDandAddr
  50. // MetricsMap - map for holding multiple metrics in memory
  51. type MetricsMap map[string]Metrics
  52. // NetworkMetrics - metrics model for all nodes in a network
  53. type NetworkMetrics struct {
  54. Nodes MetricsMap `json:"nodes" bson:"nodes" yaml:"nodes"`
  55. }