Add workers and graceful shutdown
This commit is contained in:
@@ -3,7 +3,6 @@ package sqlite
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"git.vakhrushev.me/av/transcriber/internal/entity"
|
||||
@@ -151,7 +150,7 @@ func (repo *TranscriptJobRepository) FindAndAcquire(state, acquisitionId string,
|
||||
return nil, fmt.Errorf("failed to build query: %w", err)
|
||||
}
|
||||
|
||||
log.Printf("aquire sql: %s", sql)
|
||||
// log.Printf("aquire sql: %s", sql)
|
||||
|
||||
result, err := repo.db.Exec(sql, args...)
|
||||
if err != nil {
|
||||
|
@@ -1,41 +1,138 @@
|
||||
package worker
|
||||
|
||||
import (
|
||||
"git.vakhrushev.me/av/transcriber/internal/repo"
|
||||
"context"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"git.vakhrushev.me/av/transcriber/internal/service/transcribe"
|
||||
)
|
||||
|
||||
// Worker представляет базовый интерфейс для всех воркеров
|
||||
type Worker interface {
|
||||
Start(ctx context.Context)
|
||||
Name() string
|
||||
}
|
||||
|
||||
// ConversionWorker обрабатывает задачи конвертации
|
||||
type ConversionWorker struct {
|
||||
jobRepo repo.TranscriptJobRepository
|
||||
fileRepo repo.FileRepository
|
||||
worker string
|
||||
transcribeService *transcribe.TranscribeService
|
||||
}
|
||||
|
||||
func NewConversionWorker(jobRepo repo.TranscriptJobRepository, fileRepo repo.FileRepository, worker string) *ConversionWorker {
|
||||
return &ConversionWorker{jobRepo: jobRepo, fileRepo: fileRepo}
|
||||
func NewConversionWorker(transcribeService *transcribe.TranscribeService) *ConversionWorker {
|
||||
return &ConversionWorker{
|
||||
transcribeService: transcribeService,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *ConversionWorker) Run() {
|
||||
w.handleJob()
|
||||
// for {
|
||||
// err := w.handleJob()
|
||||
// if err != nil {
|
||||
// continue
|
||||
// }
|
||||
// }
|
||||
func (w *ConversionWorker) Name() string {
|
||||
return "ConversionWorker"
|
||||
}
|
||||
|
||||
func (w *ConversionWorker) handleJob() error {
|
||||
// job, err := w.jobRepo.FindAndAcquire(entity.StateCreated, w.worker)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
func (w *ConversionWorker) Start(ctx context.Context) {
|
||||
log.Printf("%s started", w.Name())
|
||||
|
||||
// job.MoveToState(entity.StateConverted)
|
||||
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)
|
||||
}
|
||||
|
||||
// err = w.jobRepo.Save(job)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
|
||||
return nil
|
||||
// Ждем 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 *transcribe.TranscribeService
|
||||
}
|
||||
|
||||
func NewTranscribeWorker(transcribeService *transcribe.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 *transcribe.TranscribeService
|
||||
}
|
||||
|
||||
func NewCheckWorker(transcribeService *transcribe.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):
|
||||
// Продолжаем работу
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user