Introduce higer-level API for retrieving statistics
[govpp.git] / api / stats.go
diff --git a/api/stats.go b/api/stats.go
new file mode 100644 (file)
index 0000000..ec623c7
--- /dev/null
@@ -0,0 +1,79 @@
+package api
+
+// SystemStats represents global system statistics.
+type SystemStats struct {
+       VectorRate     float64
+       InputRate      float64
+       LastUpdate     float64
+       LastStatsClear float64
+       Heartbeat      float64
+}
+
+// NodeStats represents per node statistics.
+type NodeStats struct {
+       Nodes []NodeCounters
+}
+
+// NodeCounters represents node counters.
+type NodeCounters struct {
+       NodeIndex uint32
+       // TODO: node name is not currently retrievable via stats API (will be most likely added in 19.04)
+       //NodeName string
+
+       Clocks   uint64
+       Vectors  uint64
+       Calls    uint64
+       Suspends uint64
+}
+
+// InterfaceStats represents per interface statistics.
+type InterfaceStats struct {
+       Interfaces []InterfaceCounters
+}
+
+// InterfaceCounters represents interface counters.
+type InterfaceCounters struct {
+       InterfaceIndex uint32
+       // TODO: interface name is not currently retrievable via stats API (will be most likely added in 19.04)
+       //InterfaceName string
+
+       RxPackets uint64
+       RxBytes   uint64
+       RxErrors  uint64
+       TxPackets uint64
+       TxBytes   uint64
+       TxErrors  uint64
+
+       RxUnicast     [2]uint64 // packets[0], bytes[1]
+       RxMulticast   [2]uint64 // packets[0], bytes[1]
+       RxBroadcast   [2]uint64 // packets[0], bytes[1]
+       TxUnicastMiss [2]uint64 // packets[0], bytes[1]
+       TxMulticast   [2]uint64 // packets[0], bytes[1]
+       TxBroadcast   [2]uint64 // packets[0], bytes[1]
+
+       Drops   uint64
+       Punts   uint64
+       IP4     uint64
+       IP6     uint64
+       RxNoBuf uint64
+       RxMiss  uint64
+}
+
+// ErrorStats represents statistics per error counter.
+type ErrorStats struct {
+       Errors []ErrorCounter
+}
+
+// ErrorCounter represents error counter.
+type ErrorCounter struct {
+       CounterName string
+       Value       uint64
+}
+
+// StatsProvider provides the methods for getting statistics.
+type StatsProvider interface {
+       GetSystemStats() (*SystemStats, error)
+       GetNodeStats() (*NodeStats, error)
+       GetInterfaceStats() (*InterfaceStats, error)
+       GetErrorStats(names ...string) (*ErrorStats, error)
+}