package models import ( "time" ) // Metrics - metrics struct type Metrics struct { Network string `json:"network" bson:"network" yaml:"network"` NodeID string `json:"node_id" bson:"node_id" yaml:"node_id"` NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"` Connectivity map[string]Metric `json:"connectivity" bson:"connectivity" yaml:"connectivity"` FailoverPeers map[string]string `json:"needsfailover" bson:"needsfailover" yaml:"needsfailover"` } // Metric - holds a metric for data between nodes type Metric struct { NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"` Uptime int64 `json:"uptime" bson:"uptime" yaml:"uptime"` TotalTime int64 `json:"totaltime" bson:"totaltime" yaml:"totaltime"` Latency int64 `json:"latency" bson:"latency" yaml:"latency"` TotalReceived int64 `json:"totalreceived" bson:"totalreceived" yaml:"totalreceived"` TotalSent int64 `json:"totalsent" bson:"totalsent" yaml:"totalsent"` ActualUptime time.Duration `json:"actualuptime" bson:"actualuptime" yaml:"actualuptime"` PercentUp float64 `json:"percentup" bson:"percentup" yaml:"percentup"` Connected bool `json:"connected" bson:"connected" yaml:"connected"` } // IDandAddr - struct to hold ID and primary Address type IDandAddr struct { ID string `json:"id" bson:"id" yaml:"id"` Address string `json:"address" bson:"address" yaml:"address"` Name string `json:"name" bson:"name" yaml:"name"` IsServer string `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"` Network string `json:"network" bson:"network" yaml:"network" validate:"network"` } // PeerMap - peer map for ids and addresses in metrics type PeerMap map[string]IDandAddr // HostPeerMap - host peer map for ids and addresses type HostPeerMap map[string]map[string]IDandAddr // MetricsMap - map for holding multiple metrics in memory type MetricsMap map[string]Metrics // NetworkMetrics - metrics model for all nodes in a network type NetworkMetrics struct { Nodes MetricsMap `json:"nodes" bson:"nodes" yaml:"nodes"` }