парсер

This commit is contained in:
Artem Tsyrulnikov
2026-01-06 21:04:42 +03:00
parent b77e4fd0b6
commit 2c0ae2dfc3
45 changed files with 2202 additions and 51 deletions

View File

@@ -0,0 +1,65 @@
package worker
import (
"context"
"time"
"github.com/rs/zerolog/log"
"github.com/TelegramExchange/tgex-parser/internal/usecase"
)
type ViewsConfig struct {
Interval time.Duration `envconfig:"WORKER__VIEWS_INTERVAL" default:"30s"`
RequestTimeout time.Duration `envconfig:"WORKER__REQUEST_TIMEOUT" default:"10s"`
}
type ViewsWorker struct {
usecase *usecase.UseCase
config ViewsConfig
stop chan struct{}
done chan struct{}
}
func NewViewsWorker(uc *usecase.UseCase, cfg ViewsConfig) *ViewsWorker {
w := &ViewsWorker{
usecase: uc,
config: cfg,
stop: make(chan struct{}),
done: make(chan struct{}),
}
go w.run()
return w
}
func (w *ViewsWorker) run() {
log.Info().Msg("views worker: started")
for {
select {
case <-w.stop:
log.Info().Msg("views worker: stopped")
close(w.done)
return
case <-time.After(w.config.Interval):
log.Debug().Dur("interval", w.config.Interval).Msg("views worker: refresh tick")
ctx, cancel := context.WithTimeout(context.Background(), w.config.RequestTimeout)
err := w.usecase.FetchViews(ctx)
if err != nil {
log.Error().Err(err).Msg("views worker: FetchViews error")
} else {
log.Debug().Msg("views worker: refresh finished")
}
cancel()
}
}
}
func (w *ViewsWorker) Stop() {
close(w.stop)
<-w.done
}