diff options
author | Ondrej Fabry <ofabry@cisco.com> | 2018-10-23 13:20:31 +0200 |
---|---|---|
committer | Ondrej Fabry <ofabry@cisco.com> | 2018-10-23 13:20:31 +0200 |
commit | 6d6ad42ec0942a378c5550ad3472f388d7c85d49 (patch) | |
tree | c938eca12ca683335a518e6c0bcf7df3c00cea1f /adapter/vppapiclient/stat_client.go | |
parent | c00356ec332203f353fcd5f5992226940d90da92 (diff) |
Unexport adapter implementations to make it clear that API interfaces should be used
- this decision was made to follow more idiomatic Go, described in
https://golang.org/doc/effective_go.html#generality
Change-Id: I341556c792df77ca35a60a1e4afc541482f23734
Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
Diffstat (limited to 'adapter/vppapiclient/stat_client.go')
-rw-r--r-- | adapter/vppapiclient/stat_client.go | 28 |
1 files changed, 19 insertions, 9 deletions
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)) |