Retrieved numbers relate to the statseg heap.
Change-Id: I72750183db3524481918c71c993b39e65c28ddb6
Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
GetInterfaceStats(*InterfaceStats) error
GetErrorStats(*ErrorStats) error
GetBufferStats(*BufferStats) error
+ GetMemoryStats(*MemoryStats) error
}
// SystemStats represents global system statistics.
Used float64
Available float64
}
+
+// MemoryStats represents memory stats segment counters.
+type MemoryStats struct {
+ Total float64
+ Used float64
+}
CounterStatsPrefix = "/err/"
+ MemoryStatPrefix = "/mem/statseg"
+ MemoryStats_Total = "total"
+ MemoryStats_Used = "used"
+
InterfaceStatsPrefix = "/if/"
InterfaceStats_Names = InterfaceStatsPrefix + "names"
InterfaceStats_Drops = InterfaceStatsPrefix + "drops"
ifaceStatsData *adapter.StatDir
sysStatsData *adapter.StatDir
bufStatsData *adapter.StatDir
+ memStatsData *adapter.StatDir
}
func newStatsConnection(stats adapter.StatsAPI) *StatsConnection {
return nil
}
+
+func (c *StatsConnection) GetMemoryStats(memStats *api.MemoryStats) (err error) {
+ if err := c.updateStats(&c.memStatsData, MemoryStatPrefix); err != nil {
+ return err
+ }
+
+ for _, stat := range c.memStatsData.Entries {
+ _, f := path.Split(string(stat.Name))
+ var val float64
+ m, ok := stat.Data.(adapter.ScalarStat)
+ if ok {
+ val = float64(m)
+ }
+ switch f {
+ case MemoryStats_Total:
+ memStats.Total = val
+ case MemoryStats_Used:
+ memStats.Used = val
+ }
+ }
+ return nil
+}
statsSockAddrVpp2 = flag.String("stats-sock-2", statsclient.DefaultSocketName, "Path to stats socket file of the VPP2")
)
-var Errors []error
+var errors []error
func main() {
flag.Parse()
fmt.Println("Starting multi-vpp example")
defer func() {
- if len(Errors) > 0 {
- logInfo("Finished with %d errors\n", len(Errors))
+ if len(errors) > 0 {
+ logInfo("Finished with %d errors\n", len(errors))
os.Exit(1)
} else {
logInfo("Finished successfully\n")
// logError prints error message
func logError(err error, msg string) {
fmt.Printf("[ERROR]: %s: %v\n", msg, err)
- Errors = append(Errors, err)
+ errors = append(errors, err)
}
// process errors encountered during the example
defer func() {
- if len(Errors) > 0 {
- fmt.Printf("finished with %d errors\n", len(Errors))
+ if len(errors) > 0 {
+ fmt.Printf("finished with %d errors\n", len(errors))
os.Exit(1)
} else {
fmt.Println("finished successfully")
fmt.Printf("JSON: %s\n", b)
}
-var Errors []error
+var errors []error
func logError(err error, msg string) {
fmt.Printf("ERROR: %s: %v\n", msg, err)
- Errors = append(Errors, err)
+ errors = append(errors, err)
}
func init() {
flag.Usage = func() {
- fmt.Fprintf(os.Stderr, "%s: usage [ls|dump|poll|errors|interfaces|nodes|system|buffers] <patterns>...\n", os.Args[0])
+ fmt.Fprintf(os.Stderr, "%s: usage [ls|dump|poll|errors|interfaces|nodes|system|buffers|memory] <patterns>...\n", os.Args[0])
flag.PrintDefaults()
os.Exit(1)
}
}
fmt.Printf("Buffer stats: %+v\n", stats)
+ case "memory":
+ stats := new(api.MemoryStats)
+ if err := c.GetMemoryStats(stats); err != nil {
+ log.Fatalln("getting memory stats failed:", err)
+ }
+ fmt.Printf("Memory stats: %+v\n", stats)
+
case "dump":
fmt.Printf("Dumping stats.. %s\n", strings.Join(patterns, " "))
// process errors encountered during the example
defer func() {
- if len(Errors) > 0 {
- fmt.Printf("finished with %d errors\n", len(Errors))
+ if len(errors) > 0 {
+ fmt.Printf("finished with %d errors\n", len(errors))
os.Exit(1)
} else {
fmt.Println("finished successfully")
fmt.Println()
}
-var Errors []error
+var errors []error
func logError(err error, msg string) {
fmt.Printf("ERROR: %s: %v\n", msg, err)
- Errors = append(Errors, err)
+ errors = append(errors, err)
}
return nil
}
+func (s *StatsClient) GetMemoryStats(memStats *api.MemoryStats) error {
+ req := StatsRequest{StatsType: "memory"}
+ resp := StatsResponse{MemStats: new(api.MemoryStats)}
+ if err := s.rpc.Call("StatsRPC.GetStats", req, &resp); err != nil {
+ return err
+ }
+ *memStats = *resp.MemStats
+ return nil
+}
+
type BinapiClient struct {
rpc *rpc.Client
timeout time.Duration
IfaceStats *api.InterfaceStats
ErrStats *api.ErrorStats
BufStats *api.BufferStats
+ MemStats *api.MemoryStats
}
// StatsRPC is a RPC server for proxying client request to api.StatsProvider.
case "buffer":
resp.BufStats = new(api.BufferStats)
return s.statsConn.GetBufferStats(resp.BufStats)
+ case "memory":
+ resp.MemStats = new(api.MemoryStats)
+ return s.statsConn.GetMemoryStats(resp.MemStats)
default:
return fmt.Errorf("unknown stats type: %s", req.StatsType)
}