имя файла отправителя убрано из журнала приёма

- расширение приводится к перечню известных форматов прежде метки метрики:
  страница метрик открыта, и хвост имени уезжал на неё дословно
- проверки приёма перехватывают все три потока журнала и читают реестр метрик,
  каждая падает при снятии того, что сторожит
This commit is contained in:
av
2026-08-11 16:37:58 +03:00
parent ffa36e96c7
commit bd6001cd8d
18 changed files with 1797 additions and 20 deletions
+19
View File
@@ -0,0 +1,19 @@
package service
import (
"testing"
"git.vakhrushev.me/av/transcriber/internal/metrics"
)
// Умолчание расширения живёт в этом пакете, а перечень значений метки — в
// пакете метрик, и связывает их только совпадение двух литералов. Компилятор
// расхождения не поймает: смена умолчания просто сложит все записи без
// расширения в общее значение, и метка перестанет отличать «расширения не было»
// от чужого хвоста в имени.
func TestDefaultAudioExtIsKnownToMetrics(t *testing.T) {
if got := metrics.FormatLabel(defaultAudioExt); got == metrics.OtherFormatLabel {
t.Fatalf("умолчание %q не входит в перечень известных форматов: метка отдаёт %q",
defaultAudioExt, got)
}
}
+4 -6
View File
@@ -7,7 +7,6 @@ import (
"log/slog"
"os"
"path/filepath"
"strconv"
"strings"
"time"
@@ -102,9 +101,10 @@ func (s *TranscribeService) createTranscribeJob(job *entity.TranscribeJob, file
storageFileName := fmt.Sprintf("%s%s", fileId, ext)
storageFilePath := filepath.Join(s.storagePath, storageFileName)
// Имя, данное отправителем, в журнал не идёт: инвариант приватности.
// Расширение из него уже стоит в собственном имени файла на диске.
s.logger.Info("Creating transcribe job",
"file_id", fileId,
"file_name", fileName,
"storage_path", storageFilePath)
// Создаем файл на диске
@@ -139,7 +139,7 @@ func (s *TranscribeService) createTranscribeJob(job *entity.TranscribeJob, file
"duration_seconds", info.Seconds)
metrics.InputFileDurationHistogram.WithLabelValues().Observe(float64(info.Seconds))
metrics.InputFileSizeHistogram.WithLabelValues(ext).Observe(float64(size))
metrics.ObserveInputFileSize(ext, size)
// Создаем запись в таблице files
fileRecord := &entity.File{
@@ -207,9 +207,7 @@ func (s *TranscribeService) FindAndRunConversionJob() error {
conversionDuration := time.Since(startTime)
// Записываем метрику времени конвертации
metrics.ConversionDurationHistogram.
WithLabelValues(srcExt, "ogg", strconv.FormatBool(err != nil)).
Observe(conversionDuration.Seconds())
metrics.ObserveConversionDuration(srcExt, "ogg", err != nil, conversionDuration.Seconds())
if err != nil {
s.logger.Error("File conversion failed",