mirror of
https://github.com/tiny-craft/tiny-rdm.git
synced 2025-04-13 15:58:04 +08:00
pref: redesign the throttle of monitor
This commit is contained in:
parent
16fea2b6cc
commit
8b788f5f84
@ -100,8 +100,10 @@ func (c *monitorService) StartMonitor(server string) (resp types.JSResp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *monitorService) processMonitor(mutex *sync.Mutex, ch <-chan string, closeCh <-chan struct{}, cmd *redis.MonitorCmd, eventName string) {
|
func (c *monitorService) processMonitor(mutex *sync.Mutex, ch <-chan string, closeCh <-chan struct{}, cmd *redis.MonitorCmd, eventName string) {
|
||||||
lastEmitTime := time.Now().Add(-1 * time.Minute)
|
|
||||||
cache := make([]string, 0, 1000)
|
cache := make([]string, 0, 1000)
|
||||||
|
ticker := time.NewTicker(1 * time.Second)
|
||||||
|
defer ticker.Stop()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case data := <-ch:
|
case data := <-ch:
|
||||||
@ -110,14 +112,23 @@ func (c *monitorService) processMonitor(mutex *sync.Mutex, ch <-chan string, clo
|
|||||||
mutex.Lock()
|
mutex.Lock()
|
||||||
defer mutex.Unlock()
|
defer mutex.Unlock()
|
||||||
cache = append(cache, data)
|
cache = append(cache, data)
|
||||||
if time.Now().Sub(lastEmitTime) > 1*time.Second || len(cache) > 300 {
|
if len(cache) > 300 {
|
||||||
runtime.EventsEmit(c.ctx, eventName, cache)
|
runtime.EventsEmit(c.ctx, eventName, cache)
|
||||||
cache = cache[:0:cap(cache)]
|
cache = cache[:0:cap(cache)]
|
||||||
lastEmitTime = time.Now()
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case <-ticker.C:
|
||||||
|
func() {
|
||||||
|
mutex.Lock()
|
||||||
|
defer mutex.Unlock()
|
||||||
|
if len(cache) > 0 {
|
||||||
|
runtime.EventsEmit(c.ctx, eventName, cache)
|
||||||
|
cache = cache[:0:cap(cache)]
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
case <-closeCh:
|
case <-closeCh:
|
||||||
// monitor stopped
|
// monitor stopped
|
||||||
cmd.Stop()
|
cmd.Stop()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user