52 lines
927 B
Go
52 lines
927 B
Go
package debug
|
|
|
|
import (
|
|
"container/ring"
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
func Start(ctx context.Context) {
|
|
go startReceiveConsuming(ctx)
|
|
}
|
|
|
|
type Consuming struct {
|
|
Auth time.Duration
|
|
Data time.Duration
|
|
Proxy time.Duration
|
|
Total time.Duration
|
|
}
|
|
|
|
var ConsumingCh = make(chan Consuming, 1024)
|
|
var consumingList = ring.New(3000)
|
|
|
|
func startReceiveConsuming(ctx context.Context) {
|
|
InitConsumingList()
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
case c := <-ConsumingCh:
|
|
consumingList.Value = c
|
|
consumingList = consumingList.Next()
|
|
}
|
|
}
|
|
}
|
|
|
|
func InitConsumingList() {
|
|
for i := 0; i < consumingList.Len(); i++ {
|
|
consumingList.Value = nil
|
|
consumingList = consumingList.Next()
|
|
}
|
|
}
|
|
|
|
func ConsumingList() []Consuming {
|
|
consuming := make([]Consuming, 0, consumingList.Len())
|
|
consumingList.Do(func(value interface{}) {
|
|
if value != nil {
|
|
consuming = append(consuming, value.(Consuming))
|
|
}
|
|
})
|
|
return consuming
|
|
}
|