transport: mute errors when too verbose (#249)

This commit is contained in:
Louis
2024-01-06 12:03:13 +03:00
committed by GitHub
parent a61288eb19
commit c38607daf9
3 changed files with 137 additions and 16 deletions

43
utils/mute.go Normal file
View File

@@ -0,0 +1,43 @@
package utils
import (
"time"
)
type BatchMute struct {
batchTime time.Time
resetInterval time.Duration
ctr int
max int
}
func (b *BatchMute) increment(val int, t time.Time) (muted bool, skipped int) {
if b.max == 0 || b.resetInterval == 0 {
return muted, skipped
}
if b.ctr >= b.max {
skipped = b.ctr - b.max
}
if t.Sub(b.batchTime) > b.resetInterval {
b.ctr = 0
b.batchTime = t
}
b.ctr += val
return b.max > 0 && b.ctr > b.max, skipped
}
func (b *BatchMute) Increment() (muting bool, skipped int) {
return b.increment(1, time.Now().UTC())
}
func NewBatchMute(resetInterval time.Duration, max int) *BatchMute {
return &BatchMute{
batchTime: time.Now().UTC(),
resetInterval: resetInterval,
max: max,
}
}

51
utils/mute_test.go Normal file
View File

@@ -0,0 +1,51 @@
package utils
import (
"testing"
"time"
)
func TestBatchMute(t *testing.T) {
tm := time.Date(2023, time.November, 10, 23, 0, 0, 0, time.UTC)
bm := BatchMute{
batchTime: tm,
resetInterval: time.Second * 10,
max: 5,
}
for i := 0; i < 20; i++ {
tm = tm.Add(time.Second)
t.Log(bm.increment(1, tm))
}
}
func TestBatchMuteZero(t *testing.T) {
tm := time.Date(2023, time.November, 10, 23, 0, 0, 0, time.UTC)
bm := BatchMute{
batchTime: tm,
resetInterval: time.Second * 10,
max: 0,
}
for i := 0; i < 20; i++ {
tm = tm.Add(time.Second)
t.Log(bm.increment(1, tm))
}
}
func TestBatchMuteInterval(t *testing.T) {
tm := time.Date(2023, time.November, 10, 23, 0, 0, 0, time.UTC)
bm := BatchMute{
batchTime: tm,
resetInterval: 0,
max: 5,
}
for i := 0; i < 20; i++ {
tm = tm.Add(time.Second)
t.Log(bm.increment(1, tm))
}
}