Время читается единой точкой, а конец потока узнаётся не по тексту
- заведён internal/clock: Now даёт метку в UTC, Start — начало измерения длительности с монотонными часами; девять мест рабочего кода и запрос захвата переведены на него, долг «время time.Now() по месту» закрыт - клиент SpeechKit узнавал конец потока сравнением err.Error() == "EOF": отказ с тем же текстом вернул бы усечённую расшифровку как готовую, теперь errors.Is(err, io.EOF) - починены находки новых линтеров: две опечатки, два slog.DiscardHandler, четыре неэкранированные подстановки в docker/entrypoint.sh
This commit is contained in:
@@ -3,7 +3,6 @@ package service
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log/slog"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -36,7 +35,7 @@ func (r *stubJobRepo) FindAndAcquire(string, string, time.Time) (*entity.Transcr
|
||||
}
|
||||
|
||||
func serviceWithRepo(repo contract.TranscriptJobRepository) *TranscribeService {
|
||||
logger := slog.New(slog.NewTextHandler(io.Discard, nil))
|
||||
logger := slog.New(slog.DiscardHandler)
|
||||
return NewTranscribeService(repo, nil, nil, nil, nil, nil, logger)
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ func newPipelineEnv(t *testing.T, metaviewer contract.AudioMetaViewer, converter
|
||||
converter,
|
||||
&recognizer.MemoryAudioRecognizer{},
|
||||
sender,
|
||||
slog.New(slog.NewTextHandler(io.Discard, nil)),
|
||||
slog.New(slog.DiscardHandler),
|
||||
)
|
||||
|
||||
return &pipelineEnv{app: app, service: svc, jobRepo: jobRepo, fileRepo: fileRepo, sender: sender}
|
||||
|
||||
@@ -14,6 +14,8 @@ import (
|
||||
"git.vakhrushev.me/av/transcriber/internal/entity"
|
||||
"git.vakhrushev.me/av/transcriber/internal/metrics"
|
||||
"github.com/google/uuid"
|
||||
|
||||
"git.vakhrushev.me/av/transcriber/internal/clock"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -224,7 +226,7 @@ func (s *TranscribeService) convertJob(job *entity.TranscribeJob, holder string)
|
||||
s.logger.Info("Converting file", "job_id", job.Id, "src_format", srcExt)
|
||||
|
||||
// Измеряем время конвертации
|
||||
startTime := time.Now()
|
||||
startTime := clock.Start()
|
||||
err = s.converter.Convert(src.Path(), dest.Path())
|
||||
conversionDuration := time.Since(startTime)
|
||||
|
||||
@@ -321,7 +323,7 @@ func (s *TranscribeService) transcribeJob(job *entity.TranscribeJob, holder stri
|
||||
// Обновляем задачу с ID операции распознавания
|
||||
job.FileID = &destFileRecord.Id
|
||||
job.RecognitionOpID = &operationID
|
||||
delayTime := time.Now().Add(firstCheckDelay)
|
||||
delayTime := clock.Now().Add(firstCheckDelay)
|
||||
job.MoveToStateAndDelay(entity.StateTranscribe, &delayTime)
|
||||
|
||||
if err := s.jobRepo.Save(job, holder); err != nil {
|
||||
@@ -336,7 +338,7 @@ func (s *TranscribeService) transcribeJob(job *entity.TranscribeJob, holder stri
|
||||
func (s *TranscribeService) checkTranscribeJob(job *entity.TranscribeJob, holder string) error {
|
||||
if job.RecognitionOpID == nil {
|
||||
s.logger.Error("Recognition operation ID not found", "job_id", job.Id)
|
||||
return fmt.Errorf("recogniton opId not found for job: %s", job.Id)
|
||||
return fmt.Errorf("recognition opId not found for job: %s", job.Id)
|
||||
}
|
||||
|
||||
opId := *job.RecognitionOpID
|
||||
@@ -354,7 +356,7 @@ func (s *TranscribeService) checkTranscribeJob(job *entity.TranscribeJob, holder
|
||||
// здесь своя, числом, а число попыток обнуляется переходом: ожидание
|
||||
// чужой операции попытку не тратит.
|
||||
s.logger.Info("Operation in progress", "job_id", job.Id, "operation_id", opId)
|
||||
delayTime := time.Now().Add(nextCheckDelay)
|
||||
delayTime := clock.Now().Add(nextCheckDelay)
|
||||
job.MoveToStateAndDelay(entity.StateTranscribe, &delayTime)
|
||||
if err := s.jobRepo.Save(job, holder); err != nil {
|
||||
s.logger.Error("Failed to save job", "error", err, "job_id", job.Id)
|
||||
@@ -397,7 +399,7 @@ func (s *TranscribeService) checkTranscribeJob(job *entity.TranscribeJob, holder
|
||||
// переводят в «мертва» и сообщают об этом отправителю.
|
||||
func (s *TranscribeService) findJob(state string, expiration time.Duration) (*entity.TranscribeJob, string, error) {
|
||||
acquisitionId := uuid.NewString()
|
||||
rottingTime := time.Now().Add(-1 * expiration)
|
||||
rottingTime := clock.Now().Add(-1 * expiration)
|
||||
|
||||
job, err := s.jobRepo.FindAndAcquire(state, acquisitionId, rottingTime)
|
||||
if err != nil {
|
||||
@@ -448,7 +450,7 @@ func (s *TranscribeService) scheduleRetry(job *entity.TranscribeJob, holder stri
|
||||
return
|
||||
}
|
||||
|
||||
job.RetryAfter(time.Now().Add(retryDelay(job.Attempts)))
|
||||
job.RetryAfter(clock.Now().Add(retryDelay(job.Attempts)))
|
||||
|
||||
if err := s.jobRepo.Save(job, holder); err != nil {
|
||||
var lostOnSave *contract.LostAcquisitionError
|
||||
|
||||
Reference in New Issue
Block a user