+// GetBufferStats retrieves VPP buffer pools stats.
+func (c *StatsConnection) GetBufferStats() (*api.BufferStats, error) {
+ stats, err := c.statsClient.DumpStats(BufferStatsPrefix)
+ if err != nil {
+ return nil, err
+ }
+
+ bufStats := &api.BufferStats{
+ Buffer: map[string]api.BufferPool{},
+ }
+
+ for _, stat := range stats {
+ d, f := path.Split(stat.Name)
+ d = strings.TrimSuffix(d, "/")
+
+ name := strings.TrimPrefix(d, BufferStatsPrefix)
+ b, ok := bufStats.Buffer[name]
+ if !ok {
+ b.PoolName = name
+ }
+
+ switch f {
+ case BufferStats_Cached:
+ b.Cached = scalarStatToFloat64(stat.Data)
+ case BufferStats_Used:
+ b.Used = scalarStatToFloat64(stat.Data)
+ case BufferStats_Available:
+ b.Available = scalarStatToFloat64(stat.Data)
+ }
+
+ bufStats.Buffer[name] = b
+ }
+
+ return bufStats, nil
+}
+