Provide error counters per worker for statsclient
[govpp.git] / api / stats.go
index ec623c7..3a72c6c 100644 (file)
@@ -1,12 +1,38 @@
+//  Copyright (c) 2019 Cisco and/or its affiliates.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at:
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+
 package api
 
+// StatsProvider provides methods for retrieving statistics.
+type StatsProvider interface {
+       GetSystemStats(*SystemStats) error
+       GetNodeStats(*NodeStats) error
+       GetInterfaceStats(*InterfaceStats) error
+       GetErrorStats(*ErrorStats) error
+       GetBufferStats(*BufferStats) error
+       GetMemoryStats(*MemoryStats) error
+}
+
 // SystemStats represents global system statistics.
 type SystemStats struct {
-       VectorRate     float64
-       InputRate      float64
-       LastUpdate     float64
-       LastStatsClear float64
-       Heartbeat      float64
+       VectorRate          uint64
+       NumWorkerThreads    uint64
+       VectorRatePerWorker []uint64
+       InputRate           uint64
+       LastUpdate          uint64
+       LastStatsClear      uint64
+       Heartbeat           uint64
 }
 
 // NodeStats represents per node statistics.
@@ -17,8 +43,7 @@ type NodeStats struct {
 // 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
+       NodeName  string // requires VPP 19.04+
 
        Clocks   uint64
        Vectors  uint64
@@ -34,22 +59,20 @@ type InterfaceStats struct {
 // 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]
+       InterfaceName  string // requires VPP 19.04+
+
+       Rx InterfaceCounterCombined
+       Tx InterfaceCounterCombined
+
+       RxErrors uint64
+       TxErrors uint64
+
+       RxUnicast   InterfaceCounterCombined
+       RxMulticast InterfaceCounterCombined
+       RxBroadcast InterfaceCounterCombined
+       TxUnicast   InterfaceCounterCombined
+       TxMulticast InterfaceCounterCombined
+       TxBroadcast InterfaceCounterCombined
 
        Drops   uint64
        Punts   uint64
@@ -57,6 +80,13 @@ type InterfaceCounters struct {
        IP6     uint64
        RxNoBuf uint64
        RxMiss  uint64
+       Mpls    uint64
+}
+
+// InterfaceCounterCombined defines combined counters for interfaces.
+type InterfaceCounterCombined struct {
+       Packets uint64
+       Bytes   uint64
 }
 
 // ErrorStats represents statistics per error counter.
@@ -67,13 +97,26 @@ type ErrorStats struct {
 // ErrorCounter represents error counter.
 type ErrorCounter struct {
        CounterName string
-       Value       uint64
+
+       Values []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)
+// BufferStats represents statistics per buffer pool.
+type BufferStats struct {
+       Buffer map[string]BufferPool
+}
+
+// BufferPool represents buffer pool.
+type BufferPool struct {
+       PoolName string
+
+       Cached    float64
+       Used      float64
+       Available float64
+}
+
+// MemoryStats represents memory stats segment counters.
+type MemoryStats struct {
+       Total float64
+       Used  float64
 }