139 lines
3.3 KiB
Go
139 lines
3.3 KiB
Go
package worker
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"time"
|
|
|
|
"git.vakhrushev.me/av/transcriber/internal/service"
|
|
)
|
|
|
|
// Worker представляет базовый интерфейс для всех воркеров
|
|
type Worker interface {
|
|
Start(ctx context.Context)
|
|
Name() string
|
|
}
|
|
|
|
// ConversionWorker обрабатывает задачи конвертации
|
|
type ConversionWorker struct {
|
|
transcribeService *service.TranscribeService
|
|
}
|
|
|
|
func NewConversionWorker(transcribeService *service.TranscribeService) *ConversionWorker {
|
|
return &ConversionWorker{
|
|
transcribeService: transcribeService,
|
|
}
|
|
}
|
|
|
|
func (w *ConversionWorker) Name() string {
|
|
return "ConversionWorker"
|
|
}
|
|
|
|
func (w *ConversionWorker) Start(ctx context.Context) {
|
|
log.Printf("%s started", w.Name())
|
|
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Printf("%s received shutdown signal", w.Name())
|
|
return
|
|
default:
|
|
err := w.transcribeService.FindAndRunConversionJob()
|
|
if err != nil {
|
|
log.Printf("%s error: %v", w.Name(), err)
|
|
}
|
|
|
|
// Ждем 1 секунду перед следующей итерацией
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Printf("%s received shutdown signal during sleep", w.Name())
|
|
return
|
|
case <-time.After(1 * time.Second):
|
|
// Продолжаем работу
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TranscribeWorker обрабатывает задачи транскрипции
|
|
type TranscribeWorker struct {
|
|
transcribeService *service.TranscribeService
|
|
}
|
|
|
|
func NewTranscribeWorker(transcribeService *service.TranscribeService) *TranscribeWorker {
|
|
return &TranscribeWorker{
|
|
transcribeService: transcribeService,
|
|
}
|
|
}
|
|
|
|
func (w *TranscribeWorker) Name() string {
|
|
return "TranscribeWorker"
|
|
}
|
|
|
|
func (w *TranscribeWorker) Start(ctx context.Context) {
|
|
log.Printf("%s started", w.Name())
|
|
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Printf("%s received shutdown signal", w.Name())
|
|
return
|
|
default:
|
|
err := w.transcribeService.FindAndRunTranscribeJob()
|
|
if err != nil {
|
|
log.Printf("%s error: %v", w.Name(), err)
|
|
}
|
|
|
|
// Ждем 1 секунду перед следующей итерацией
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Printf("%s received shutdown signal during sleep", w.Name())
|
|
return
|
|
case <-time.After(1 * time.Second):
|
|
// Продолжаем работу
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// CheckWorker обрабатывает задачи проверки статуса распознавания
|
|
type CheckWorker struct {
|
|
transcribeService *service.TranscribeService
|
|
}
|
|
|
|
func NewCheckWorker(transcribeService *service.TranscribeService) *CheckWorker {
|
|
return &CheckWorker{
|
|
transcribeService: transcribeService,
|
|
}
|
|
}
|
|
|
|
func (w *CheckWorker) Name() string {
|
|
return "CheckWorker"
|
|
}
|
|
|
|
func (w *CheckWorker) Start(ctx context.Context) {
|
|
log.Printf("%s started", w.Name())
|
|
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Printf("%s received shutdown signal", w.Name())
|
|
return
|
|
default:
|
|
err := w.transcribeService.FindAndRunTranscribeCheckJob()
|
|
if err != nil {
|
|
log.Printf("%s error: %v", w.Name(), err)
|
|
}
|
|
|
|
// Ждем 1 секунду перед следующей итерацией
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Printf("%s received shutdown signal during sleep", w.Name())
|
|
return
|
|
case <-time.After(1 * time.Second):
|
|
// Продолжаем работу
|
|
}
|
|
}
|
|
}
|
|
}
|