From 0406cd896bd91e4ed596bab6fca6bb17b640decf Mon Sep 17 00:00:00 2001 From: Vigilans Date: Wed, 9 Sep 2020 11:33:29 +0800 Subject: [PATCH] Add UnregisterChannel & Modify unregistering logic --- app/stats/stats.go | 20 ++++++++++++++++---- features/stats/stats.go | 10 +++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/app/stats/stats.go b/app/stats/stats.go index ce9e3692..7e2122df 100644 --- a/app/stats/stats.go +++ b/app/stats/stats.go @@ -130,11 +130,11 @@ func (m *Manager) RegisterCounter(name string) (stats.Counter, error) { func (m *Manager) UnregisterCounter(name string) error { m.access.Lock() defer m.access.Unlock() - if _, found := m.counters[name]; !found { - return newError("Counter ", name, " was not found.") + + if _, found := m.counters[name]; found { + newError("remove counter ", name).AtDebug().WriteToLog() + delete(m.counters, name) } - newError("remove counter ", name).AtDebug().WriteToLog() - delete(m.counters, name) return nil } @@ -176,6 +176,18 @@ func (m *Manager) RegisterChannel(name string) (stats.Channel, error) { return c, nil } +// UnregisterChannel implements stats.Manager. +func (m *Manager) UnregisterChannel(name string) error { + m.access.Lock() + defer m.access.Unlock() + + if _, found := m.channels[name]; found { + newError("remove channel ", name).AtDebug().WriteToLog() + delete(m.channels, name) + } + return nil +} + // GetChannel implements stats.Manager. func (m *Manager) GetChannel(name string) stats.Channel { m.access.RLock() diff --git a/features/stats/stats.go b/features/stats/stats.go index 6ac0da26..a27b441c 100644 --- a/features/stats/stats.go +++ b/features/stats/stats.go @@ -38,12 +38,15 @@ type Manager interface { // RegisterCounter registers a new counter to the manager. The identifier string must not be empty, and unique among other counters. RegisterCounter(string) (Counter, error) + // UnregisterCounter unregisters a counter from the manager by its identifier. UnregisterCounter(string) error // GetCounter returns a counter by its identifier. GetCounter(string) Counter // RegisterChannel registers a new channel to the manager. The identifier string must not be empty, and unique among other channels. RegisterChannel(string) (Channel, error) + // UnregisterCounter unregisters a channel from the manager by its identifier. + UnregisterChannel(string) error // GetChannel returns a channel by its identifier. GetChannel(string) Channel } @@ -90,7 +93,7 @@ func (NoopManager) RegisterCounter(string) (Counter, error) { // UnregisterCounter implements Manager. func (NoopManager) UnregisterCounter(string) error { - return newError("not implemented") + return nil } // GetCounter implements Manager. @@ -103,6 +106,11 @@ func (NoopManager) RegisterChannel(string) (Channel, error) { return nil, newError("not implemented") } +// UnregisterChannel implements Manager. +func (NoopManager) UnregisterChannel(string) error { + return nil +} + // GetChannel implements Manager. func (NoopManager) GetChannel(string) Channel { return nil