X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=adapter%2Fvppapiclient%2Fstat_client.go;fp=adapter%2Fvppapiclient%2Fstat_client.go;h=2e2d6db85d02324c8c59066c6c53554cdadb073f;hb=6d6ad42ec0942a378c5550ad3472f388d7c85d49;hp=5f3b932e5cf3f605e077d87765dff32945ad4422;hpb=c00356ec332203f353fcd5f5992226940d90da92;p=govpp.git diff --git a/adapter/vppapiclient/stat_client.go b/adapter/vppapiclient/stat_client.go index 5f3b932..2e2d6db 100644 --- a/adapter/vppapiclient/stat_client.go +++ b/adapter/vppapiclient/stat_client.go @@ -161,21 +161,28 @@ var ( DefaultStatSocket = "/run/vpp/stats.sock" ) -// StatClient is the default implementation of StatsAPI. -type StatClient struct { +// global VPP stats API client, library vppapiclient only supports +// single connection at a time +var globalStatClient *statClient + +// stubStatClient is the default implementation of StatsAPI. +type statClient struct { socketName string } // NewStatClient returns new VPP stats API client. -func NewStatClient(socketName string) *StatClient { - return &StatClient{ +func NewStatClient(socketName string) adapter.StatsAPI { + return &statClient{ socketName: socketName, } } -func (c *StatClient) Connect() error { - var sockName string +func (c *statClient) Connect() error { + if globalStatClient != nil { + return fmt.Errorf("already connected to stats API, disconnect first") + } + var sockName string if c.socketName == "" { sockName = DefaultStatSocket } else { @@ -187,15 +194,18 @@ func (c *StatClient) Connect() error { return fmt.Errorf("connecting to VPP stats API failed (rc=%v)", rc) } + globalStatClient = c return nil } -func (c *StatClient) Disconnect() error { +func (c *statClient) Disconnect() error { + globalStatClient = nil + C.govpp_stat_disconnect() return nil } -func (c *StatClient) ListStats(patterns ...string) (stats []string, err error) { +func (c *statClient) ListStats(patterns ...string) (stats []string, err error) { dir := C.govpp_stat_segment_ls(convertStringSlice(patterns)) defer C.govpp_stat_segment_vec_free(unsafe.Pointer(dir)) @@ -209,7 +219,7 @@ func (c *StatClient) ListStats(patterns ...string) (stats []string, err error) { return stats, nil } -func (c *StatClient) DumpStats(patterns ...string) (stats []*adapter.StatEntry, err error) { +func (c *statClient) DumpStats(patterns ...string) (stats []*adapter.StatEntry, err error) { dir := C.govpp_stat_segment_ls(convertStringSlice(patterns)) defer C.govpp_stat_segment_vec_free(unsafe.Pointer(dir))