aboutsummaryrefslogtreecommitdiffstats
path: root/adapter/stats_api.go
blob: 8815aaec1282af0379454deee1c0a06415d91af6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package adapter

// StatsAPI provides connection to VPP stats API.
type StatsAPI interface {
	// Connect establishes client connection to the stats API.
	Connect() error

	// Disconnect terminates client connection.
	Disconnect() error

	// ListStats lists names for all stats.
	ListStats(patterns ...string) (statNames []string, err error)

	// DumpStats dumps all stat entries.
	DumpStats(patterns ...string) ([]*StatEntry, error)
}

// StatType represents type of stat directory and simply
// defines what type of stat data is stored in the stat entry.
type StatType int

const (
	_ StatType = iota
	ScalarIndex
	SimpleCounterVector
	CombinedCounterVector
	ErrorIndex
)

func (d StatType) String() string {
	switch d {
	case ScalarIndex:
		return "ScalarIndex"
	case SimpleCounterVector:
		return "SimpleCounterVector"
	case CombinedCounterVector:
		return "CombinedCounterVector"
	case ErrorIndex:
		return "ErrorIndex"
	}
	return "UnknownStatType"
}

// StatEntry represents single stat entry. The type of stat stored in Data
// is defined by Type.
type StatEntry struct {
	Name string
	Type StatType
	Data Stat
}

// Counter represents simple counter with single value.
type Counter uint64

// CombinedCounter represents counter with two values, for packet count and bytes count.
type CombinedCounter struct {
	Packets Counter
	Bytes   Counter
}

// ScalarStat represents stat for ScalarIndex.
type ScalarStat float64

// ErrorStat represents stat for ErrorIndex.
type ErrorStat uint64

// SimpleCounterStat represents stat for SimpleCounterVector.
// The outer array represents workers and the inner array represents sw_if_index.
// Values should be aggregated per interface for every worker.
type SimpleCounterStat [][]Counter

// CombinedCounterStat represents stat for CombinedCounterVector.
// The outer array represents workers and the inner array represents sw_if_index.
// Values should be aggregated per interface for every worker.
type CombinedCounterStat [][]CombinedCounter

// Data represents some type of stat which is usually defined by StatType.
type Stat interface {
	// isStat is unexported to limit implementations of Data interface to this package,
	isStat()
}

func (ScalarStat) isStat()          {}
func (ErrorStat) isStat()           {}
func (SimpleCounterStat) isStat()   {}
func (CombinedCounterStat) isStat() {}