Время читается единой точкой, а конец потока узнаётся не по тексту

- заведён 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:
av
2026-08-13 09:01:36 +03:00
parent 6c7f006e75
commit 1d243ad2f6
9 changed files with 69 additions and 20 deletions
+5 -3
View File
@@ -2,6 +2,8 @@ package entity
import (
"time"
"git.vakhrushev.me/av/transcriber/internal/clock"
)
type TranscribeJob struct {
@@ -52,13 +54,13 @@ func (j *TranscribeJob) MoveToState(state string) {
// именно отказавшие: иначе задача, прошедшая конвейер целиком, накопила бы
// их поштучно и умерла бы здоровой.
j.Attempts = 0
j.UpdatedAt = time.Now()
j.UpdatedAt = clock.Now()
}
func (j *TranscribeJob) MoveToStateAndDelay(state string, delay *time.Time) {
j.MoveToState(state)
j.DelayTime = delay
j.UpdatedAt = time.Now()
j.UpdatedAt = clock.Now()
}
func (j *TranscribeJob) Done(transcriptionText string) {
@@ -78,7 +80,7 @@ func (j *TranscribeJob) RetryAfter(delay time.Time) {
j.AcquisitionID = nil
j.AcquireTime = nil
j.DelayTime = &delay
j.UpdatedAt = time.Now()
j.UpdatedAt = clock.Now()
}
// Die переводит задачу, исчерпавшую попытки, в состояние «мертва». Число