удалён вход Telegram, владелец записи стал обязателен в схеме
- убраны клиент бота, транспорт обновлений, отправитель сообщений, сборка входа при старте, секция настроек и зависимость go-telegram-bot-api; из конвейера ушла доставка ответа отправителю — исход виден опросом готовности. Колонки адресата и значение источника остались в схеме: применённые шаги не переписываются - шаг 202608140003 запрещает пустого владельца у аудиозаписи и у файла; существующие строки он не проверяет, и это принято сознательно — искать их надо запросом до выкладки - ревью нашло два пред-существующих дефекта, оба закрыты: пустой второй ответ распознавателя стирал сохранённую расшифровку, а пустая расшифровка перестала быть заметной вместе с убранной доставкой. Попутно поднят golang.org/x/image до v0.45.0 — красный шаг vulns, воспроизводился и на чистом master
This commit is contained in:
@@ -20,7 +20,6 @@ import (
|
||||
pbrepo "git.vakhrushev.me/av/transcriber/internal/adapter/repo/pocketbase"
|
||||
"git.vakhrushev.me/av/transcriber/internal/config"
|
||||
httpcontroller "git.vakhrushev.me/av/transcriber/internal/controller/http"
|
||||
tgcontroller "git.vakhrushev.me/av/transcriber/internal/controller/tg"
|
||||
"git.vakhrushev.me/av/transcriber/internal/controller/worker"
|
||||
"git.vakhrushev.me/av/transcriber/internal/metrics"
|
||||
"git.vakhrushev.me/av/transcriber/internal/service"
|
||||
@@ -60,14 +59,6 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Включённый вход без ключа доступа — ошибка настройки, а не режим: бот по
|
||||
// пустому ключу не появится, а тихий подъём без него оставил бы отправителей
|
||||
// без ответов.
|
||||
if err := cfg.Telegram.Validate(); err != nil {
|
||||
logger.Error("Unable to start with incomplete telegram settings", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Числа конвейера проверяются здесь же: ноль воркеров — объявленный режим, а
|
||||
// отрицательное число и нулевой предел простоя — опечатка, и подниматься с
|
||||
// ней значит остановить всякую запись первым же захватом.
|
||||
@@ -112,12 +103,6 @@ func main() {
|
||||
metaviewer := ffmpegmv.NewFfmpegMetaViewer()
|
||||
converter := ffmpegconv.NewFfmpegConverter()
|
||||
|
||||
tgBot, tgSender, err := buildTelegram(cfg.Telegram, logger)
|
||||
if err != nil {
|
||||
logger.Error("Failed to create Telegram bot", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
recognizer, err := yandex.NewYandexAudioRecognizerService(yandex.YandexAudioRecognizerConfig{
|
||||
Region: cfg.Yandex.ObjStorageRegion,
|
||||
AccessKey: cfg.Yandex.ObjStorageAccessKey,
|
||||
@@ -147,7 +132,6 @@ func main() {
|
||||
metaviewer,
|
||||
converter,
|
||||
recognizer,
|
||||
tgSender,
|
||||
cfg.Pipeline.StuckLimits(),
|
||||
logger,
|
||||
)
|
||||
@@ -159,32 +143,6 @@ func main() {
|
||||
// Создаем WaitGroup для ожидания завершения всех воркеров
|
||||
var wg sync.WaitGroup
|
||||
|
||||
tgConfig := tgcontroller.TelegramConfig{
|
||||
UpdateTimeout: cfg.Telegram.UpdateTimeout,
|
||||
UserWhiteList: cfg.Server.UsersWhiteList,
|
||||
}
|
||||
|
||||
// Транспорт поднимается только там, где есть клиент: о том, что бота нет,
|
||||
// сказано выше единственной записью, и вторая здесь была бы записью о том
|
||||
// же факте.
|
||||
var tgController *tgcontroller.TelegramController
|
||||
if tgBot != nil {
|
||||
tgController, err = tgcontroller.NewTelegramController(tgConfig, tgBot, transcribeService, logger)
|
||||
if err != nil {
|
||||
logger.Error("Failed to create Telegram controller", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Запускаем Telegram бот в отдельной горутине
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
logger.Info("Starting Telegram bot")
|
||||
tgController.Start(ctx)
|
||||
logger.Info("Telegram bot stopped gracefully")
|
||||
}()
|
||||
}
|
||||
|
||||
// Пул одинаковых воркеров: специализации у них нет, шаг выбирается по рубежу
|
||||
// самой записи. Число приходит настройкой, ноль — законное значение.
|
||||
pool := worker.NewPool(cfg.Pipeline.Workers, transcribeService.RunStep, logger)
|
||||
@@ -194,9 +152,9 @@ func main() {
|
||||
pool.Start(ctx)
|
||||
}()
|
||||
|
||||
// Вход по HTTP поднимается всегда: он основной, и отдельного разреза у него
|
||||
// нет. Признак ставится рядом с признаком Telegram, чтобы владелец судил об
|
||||
// обоих входах одним отбором.
|
||||
// Вход у сервиса один — приём по HTTP, — и метка ставится только ему. Метки
|
||||
// убранного входа Telegram здесь нет намеренно: ноль читался бы как поломка,
|
||||
// а признак существует ради того дня, когда входов снова станет больше.
|
||||
metrics.IntakeUpGauge.WithLabelValues("http").Set(1)
|
||||
|
||||
// Наши маршруты живут на роутере хранилища: панель отдаётся тем же портом,
|
||||
@@ -305,11 +263,6 @@ func main() {
|
||||
logger.Error("HTTP server stopped unexpectedly, shutting down")
|
||||
}
|
||||
|
||||
if tgController != nil {
|
||||
logger.Info("Shutting down Telegram bot...")
|
||||
tgController.Stop()
|
||||
}
|
||||
|
||||
// Создаем контекст с таймаутом для graceful shutdown HTTP сервера
|
||||
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), time.Duration(cfg.Server.ShutdownTimeout)*time.Second)
|
||||
defer shutdownCancel()
|
||||
|
||||
Reference in New Issue
Block a user