имя файла отправителя убрано из журнала приёма
- расширение приводится к перечню известных форматов прежде метки метрики: страница метрик открыта, и хвост имени уезжал на неё дословно - проверки приёма перехватывают все три потока журнала и читают реестр метрик, каждая падает при снятии того, что сторожит
This commit is contained in:
@@ -78,6 +78,96 @@ MUST нести идентификатор задачи полем `job_id` и
|
||||
- **THEN** ответ имеет код `500`
|
||||
- **AND** задача расшифровки не заводится
|
||||
|
||||
### Requirement: Имя файла, данное отправителем, не попадает в журнал
|
||||
|
||||
Приём SHALL не писать имя файла, данное отправителем, ни в одну свою журнальную
|
||||
запись — ни на успешном пути, ни на пути отказа, где имя могло бы приехать
|
||||
текстом ошибки. Имя приходит извне вместе с записью и принадлежит содержимому
|
||||
личной переписки наравне с текстом расшифровки; журнал уезжает в собранные логи,
|
||||
откуда строку не убрать.
|
||||
|
||||
Расширение, взятое из этого имени, в журнале остаётся: оно стоит в собственном
|
||||
имени файла на диске, и по нему прослеживается путь записи. Что именно попадает в
|
||||
журнал ради прослеживаемости, нормирует требование ниже; наружу расширение
|
||||
выходит только приведённым к известному виду — этому отдано отдельное требование.
|
||||
|
||||
Сценарии судят приём по HTTP, потому что имя, данное отправителем, доходит до
|
||||
сервиса только оттуда: из Telegram приходит путь, выданный самим Telegram, а не
|
||||
имя человека. Правка при этом ложится на общий шаг заведения задачи, через
|
||||
который идут оба входа, поэтому своей нормы приём из Telegram здесь не получает —
|
||||
её напишет задача, которая тронет его поведение.
|
||||
|
||||
#### Scenario: Имя записи не видно в журнале принятой записи
|
||||
|
||||
- **GIVEN** источник метаданных читает запись и отдаёт её длительность
|
||||
- **WHEN** программа шлёт `POST /api/audio` с записью, чья основа имени несёт
|
||||
опознаваемую строку при обычном расширении `.mp3`
|
||||
- **THEN** ни одна журнальная запись приёма этой строки не содержит
|
||||
- **AND** расширение `.mp3` в журнале допустимо
|
||||
|
||||
#### Scenario: Имя записи не видно в журнале при отказе приёма
|
||||
|
||||
- **GIVEN** источник метаданных не может прочитать запись
|
||||
- **WHEN** программа шлёт `POST /api/audio` с записью, чья основа имени несёт
|
||||
опознаваемую строку
|
||||
- **THEN** ни одна журнальная запись приёма, включая запись об ошибке, этой
|
||||
строки не содержит
|
||||
|
||||
### Requirement: Журнал приёма прослеживает запись
|
||||
|
||||
Приём SHALL писать в журнал идентификатор заведённого файла, расширение принятой
|
||||
записи и её размер в байтах. По ним путь записи собирается отбором по журналу, и
|
||||
удаление имени отправителя прослеживаемости не отнимает.
|
||||
|
||||
Расширение засчитывается присутствием собственного имени файла в хранилище:
|
||||
отдельного поля под него приём не заводит.
|
||||
|
||||
#### Scenario: Идентификатор, расширение и размер на месте
|
||||
|
||||
- **GIVEN** источник метаданных читает запись и отдаёт её длительность
|
||||
- **WHEN** программа шлёт `POST /api/audio` с записью
|
||||
- **THEN** журнал приёма несёт идентификатор заведённого файла, расширение
|
||||
принятой записи и её размер в байтах
|
||||
|
||||
### Requirement: Метка метрики несёт только известное расширение
|
||||
|
||||
Сервис SHALL приводить расширение принятой записи к известному виду прежде, чем
|
||||
употребить его меткой метрики: расширение приводится к нижнему регистру и
|
||||
сверяется с закрытым перечнем; совпавшее идёт приведённым, всякое другое MUST
|
||||
заменяться единым значением `other`. Перечень — `mp3`, `wav`, `ogg`, `oga`,
|
||||
`opus`, `flac`, `m4a`, `aac`, `wma`, `mp4`, `mkv`, `mov`, `avi`, `webm`, плюс
|
||||
`audio`: последнее не формат, а собственное умолчание сервиса на случай имени
|
||||
без расширения, и различать его от чужого хвоста метка обязана.
|
||||
|
||||
Страница метрик отдаётся без проверки отправителя, поэтому метка — поверхность
|
||||
пошире журнала: её читает кто угодно. Тем же ограничением снимается и рост числа
|
||||
временных рядов, которым иначе распоряжается анонимный отправитель.
|
||||
|
||||
Требование намеренно шире приёма: под него подпадает и метка шага конвертации.
|
||||
Когда конвертацию нормируют своей capability, обязанность переезжает туда вместе
|
||||
с ней.
|
||||
|
||||
Имя файла на диске это требование не трогает: там расширение остаётся тем, каким
|
||||
пришло, — это уже нормировано требованием «Имя файла в хранилище».
|
||||
|
||||
Настоящий формат записи, попавшей в `other`, остаётся видимым в журнале: значение
|
||||
`other` в метке означает «расширение не из перечня», а само оно стоит в поле
|
||||
пути журнальной строки приёма и в поле формата строки конвертации.
|
||||
|
||||
#### Scenario: Незнакомое расширение наружу не выходит
|
||||
|
||||
- **GIVEN** источник метаданных читает запись и отдаёт её длительность
|
||||
- **WHEN** программа шлёт запись с именем, чей хвост после последней точки не
|
||||
принадлежит перечню known-форматов
|
||||
- **THEN** метка метрики принимает значение `other`
|
||||
- **AND** файл в каталоге хранения сохраняет пришедшее расширение
|
||||
|
||||
#### Scenario: Известное расширение идёт как есть
|
||||
|
||||
- **GIVEN** источник метаданных читает запись и отдаёт её длительность
|
||||
- **WHEN** программа шлёт запись с именем `sample.MP3`
|
||||
- **THEN** метка метрики принимает значение `mp3`
|
||||
|
||||
### Requirement: Опрос готовности задачи
|
||||
|
||||
Сервис SHALL отдавать состояние задачи расшифровки по запросу
|
||||
|
||||
Reference in New Issue
Block a user