docs обзвон: разбор задания и замеры до работы

Четыре возражения по существу: буквальное исполнение плана даёт плацебо,
метка приходит позже, чем нужна, запасной общий файл возвращает беду,
номер звонка по форме меткой не годится.
This commit is contained in:
Дмитрий
2026-08-07 14:16:35 +03:00
parent da9d977aa1
commit cc802fadbc
@@ -5,36 +5,108 @@
## 1. Разбор задания
_пишется по ходу_
Задание просили разобрать по существу. Разбираю. Возражения есть, и их четыре.
### 1.1. Твои три замера подтвердились полностью
Проверил своими командами, не по памяти:
- общий файл имени — `most.py:293`, `PUT_IMENI = "/tmp/lena-inworld/imya.txt"`,
рядом тот самый комментарий про одноразовость;
- метка звонка у моста ЕСТЬ (`TIP_UUID = 0x01`, `most.py:144`), кладётся в
`self.uuid` и пишется в журнал (`most.py:496498`);
- в настройке станции метка — КОНСТАНТА: `…0001` для обзвонщицы
(`extensions-lena.conf:135`) и `…0002` для приёмщицы (строка 182);
- замка на число линий нет ни одного.
### 1.2. 🔴 Возражение первое: буквальное исполнение плана — ПЛАЦЕБО
План говорит «файл, названный по номеру звонка». Сегодня номер звонка у моста
— константа. Значит файл `imya-00000000-…-0001.txt` будет ОДИН НА ВСЕ ЗВОНКИ,
ровно как `imya.txt` сейчас. Беда не лечится, а переезжает в файл с другим
именем и при этом ВЫГЛЯДИТ вылеченной — это хуже, чем не лечить.
⇒ Лечение обязано УМЕТЬ ЗАМЕТИТЬ, что метка не своя, и вслух отказаться
считать её удостоверением звонка. Это и построено (§3).
### 1.3. 🔴 Возражение второе: метка приходит ПОЗЖЕ, чем нужна
Этого нет ни в плане, ни в твоих замерах. Мост берёт имя в `rabotat()`
(`most.py:632`) — а метку читает `chitat_asterisk()`, которую запускают
на 43 строки НИЖЕ (`most.py:674675`). То есть в тот миг, когда мост решает,
кому он звонит, `self.uuid` ещё равен `"?"`.
⇒ Мало сделать метку разной — надо ещё СНАЧАЛА её дождаться, а потом брать
имя. Порядок в мосте пришлось переставить.
### 1.4. 🔴 Возражение третье: запасной общий файл — это возврат той же беды
План: «Общий файл остаётся только запасным на время ручных проб». Если два
одновременных звонка оба свалятся в запасной файл — беда вернулась целиком,
только теперь через запасной вход.
⇒ Запасной файл годен ТОЛЬКО пока стоит замок на одну линию. Замок здесь не
«заодно», как в плане, а ЕДИНСТВЕННОЕ, что сегодня вправду защищает человека.
Файл по звонку — это не лекарство, а то, что ПОЗВОЛИТ снять замок потом.
Я так и построил и так написал в коде.
### 1.5. 🔴 Возражение четвёртое: `LENA_CALL_ID` по форме НЕ годится меткой
Ты просил замерить, а не гадать. Замерил.
- метка AudioSocket — 16 сырых байт, мост разбирает их `uuid.UUID(bytes=telo)`
(`most.py:497`), а станция в настройке принимает её строкой вида UUID;
- `NabornikAsterisk` выдаёт `call_id = "lena-" + uuid.uuid4().hex`
(`priyomnik.py:595`) — приставка `lena-` и 32 знака БЕЗ дефисов.
⇒ Как есть — не годится: станция такую строку в `AudioSocket()` не примет.
Но 32 знака внутри — это ровно те же 16 байт настоящего uuid4. То есть
превращение туда-обратно возможно и однозначно, и это ОДНА строка в настройке
станции. Точная строка выписана в README, чтобы владелец применил её сам.
**Настройку станции я НЕ ТРОГАЛ.** Почему — §5 и §7.
## 2. Что замерил до работы
_пишется по ходу_
| Что | Чем мерил | Что вышло |
|---|---|---|
| общий файл имени | `grep -rn "/tmp/lena-inworld"` по папке Лены | `most.py:293` — один на всю машину |
| метка звонка у моста | чтение `most.py:144,496498` | принимается, но только внутри `chitat_asterisk` |
| метка у станции | чтение `extensions-lena.conf:135,182` | две КОНСТАНТЫ, на все звонки |
| когда берётся имя | `most.py:632` против `most.py:674` | имя берут РАНЬШЕ, чем узнают метку |
| замок на линии | `grep -n "предел\|limit\|одновременн\|Semaphore" most.py` | ноль совпадений |
| формат номера звонка | `priyomnik.py:595` | `lena-` + 32 знака, не UUID по форме |
| кто чистит `imya.txt` | `chistka-zapisey.sh:80`, `proverka-chistki.sh:103128` | 🔴 НЕ чистит НИКТО и НИКОГДА — сторож это прямо охраняет |
| точка отсчёта портала | твой замер, принят как есть | 5352 проверки, 5348 зелёных, 4 пропущено, красных 0 |
🔴 Самая злая строка здесь — предпоследняя. Имя живого человека, положенное
перед звонком, которого не случилось, лежит в `/tmp` до перезагрузки машины, и
чистка его НЕ трогает нарочно. Про это в задании нет ни слова, а это ПДн.
## 3. Что построил
_пишется по ходу_
*пишется по ходу*
## 4. Сторожа и как показывал их красными
_пишется по ходу_
*пишется по ходу*
## 5. Вырезание второго рода
_пишется по ходу_
*пишется по ходу*
## 6. Полный прогон
_пишется по ходу_
*пишется по ходу*
## 7. Соседи
_пишется по ходу_
*пишется по ходу*
## 8. Мои ошибки
_пишется по ходу_
*пишется по ходу*
## 9. Что осталось незакрытым
_пишется по ходу_
*пишется по ходу*