feat: notifications

This commit is contained in:
Dawid Wysokiński 2022-10-27 10:15:01 +02:00
parent 310b107a23
commit e854a9f32a
Signed by: Kichiyaki
GPG Key ID: B5445E357FB8B892

View File

@ -34,7 +34,7 @@ type Monitor struct {
client TWHelpClient client TWHelpClient
groupSvc GroupReader groupSvc GroupReader
ennoblementsMu sync.Mutex // ennoblementsMu is used by Monitor.fetchEnnoblements ennoblementsMu sync.Mutex // ennoblementsMu is used by Monitor.fetchEnnoblements
ennoblementsLastFetchedAt map[string]time.Time // ennoblementsLastFetchedAt is used by Monitor.fetchEnnoblements ennoblementsSince map[string]time.Time // ennoblementsSince is used by Monitor.fetchEnnoblements
ennoblementsMaxConcurrentRequests int // ennoblementsMaxConcurrentRequests is used by Monitor.fetchEnnoblements ennoblementsMaxConcurrentRequests int // ennoblementsMaxConcurrentRequests is used by Monitor.fetchEnnoblements
} }
@ -49,7 +49,7 @@ func NewMonitor(
client: client, client: client,
groupSvc: groupSvc, groupSvc: groupSvc,
ennoblementsMaxConcurrentRequests: ennoblementsMaxConcurrentRequests, ennoblementsMaxConcurrentRequests: ennoblementsMaxConcurrentRequests,
ennoblementsLastFetchedAt: make(map[string]time.Time), ennoblementsSince: make(map[string]time.Time),
} }
} }
@ -220,8 +220,8 @@ func (m *Monitor) fetchEnnoblements(ctx context.Context, groups []domain.Group)
ch := make(chan listEnnoblementsResult) ch := make(chan listEnnoblementsResult)
reqLimiter := make(chan struct{}, m.ennoblementsMaxConcurrentRequests) reqLimiter := make(chan struct{}, m.ennoblementsMaxConcurrentRequests)
defer close(reqLimiter) defer close(reqLimiter)
ennoblementsLastFetchedAt := m.ennoblementsLastFetchedAt ennoblementsSince := m.ennoblementsSince
skip := make(map[string]struct{}, len(ennoblementsLastFetchedAt)) skip := make(map[string]struct{}, len(ennoblementsSince))
for _, g := range groups { for _, g := range groups {
if g.ChannelGains == "" && g.ChannelLosses == "" { if g.ChannelGains == "" && g.ChannelLosses == "" {
@ -235,7 +235,7 @@ func (m *Monitor) fetchEnnoblements(ctx context.Context, groups []domain.Group)
} }
skip[key] = struct{}{} skip[key] = struct{}{}
since := ennoblementsLastFetchedAt[key] since := ennoblementsSince[key]
if since.IsZero() { if since.IsZero() {
since = time.Now().Add(-1 * time.Minute) since = time.Now().Add(-1 * time.Minute)
} }
@ -269,8 +269,8 @@ func (m *Monitor) fetchEnnoblements(ctx context.Context, groups []domain.Group)
close(ch) close(ch)
}() }()
// reinitialize ennoblementsLastFetchedAt // reinitialize ennoblementsSince
m.ennoblementsLastFetchedAt = make(map[string]time.Time) m.ennoblementsSince = make(map[string]time.Time)
//nolint:prealloc //nolint:prealloc
var results []fetchEnnoblementsResult var results []fetchEnnoblementsResult
@ -279,9 +279,9 @@ func (m *Monitor) fetchEnnoblements(ctx context.Context, groups []domain.Group)
key := res.versionCode + ":" + res.serverKey key := res.versionCode + ":" + res.serverKey
if l := len(res.ennoblements); l > 0 { if l := len(res.ennoblements); l > 0 {
m.ennoblementsLastFetchedAt[key] = res.ennoblements[l-1].CreatedAt.Add(time.Second) m.ennoblementsSince[key] = res.ennoblements[l-1].CreatedAt.Add(time.Second)
} else { } else {
m.ennoblementsLastFetchedAt[key] = ennoblementsLastFetchedAt[key] m.ennoblementsSince[key] = ennoblementsSince[key]
} }
if res.err != nil { if res.err != nil {