docs обзвон: разбор задания и замеры до работы
Четыре возражения по существу: буквальное исполнение плана даёт плацебо, метка приходит позже, чем нужна, запасной общий файл возвращает беду, номер звонка по форме меткой не годится.
This commit is contained in:
+81
-9
@@ -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:496–498`);
|
||||
- в настройке станции метка — КОНСТАНТА: `…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:674–675`). То есть в тот миг, когда мост решает,
|
||||
кому он звонит, `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,496–498` | принимается, но только внутри `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:103–128` | 🔴 НЕ чистит НИКТО и НИКОГДА — сторож это прямо охраняет |
|
||||
| точка отсчёта портала | твой замер, принят как есть | 5352 проверки, 5348 зелёных, 4 пропущено, красных 0 |
|
||||
|
||||
🔴 Самая злая строка здесь — предпоследняя. Имя живого человека, положенное
|
||||
перед звонком, которого не случилось, лежит в `/tmp` до перезагрузки машины, и
|
||||
чистка его НЕ трогает нарочно. Про это в задании нет ни слова, а это ПДн.
|
||||
|
||||
## 3. Что построил
|
||||
|
||||
_пишется по ходу_
|
||||
*пишется по ходу*
|
||||
|
||||
## 4. Сторожа и как показывал их красными
|
||||
|
||||
_пишется по ходу_
|
||||
*пишется по ходу*
|
||||
|
||||
## 5. Вырезание второго рода
|
||||
|
||||
_пишется по ходу_
|
||||
*пишется по ходу*
|
||||
|
||||
## 6. Полный прогон
|
||||
|
||||
_пишется по ходу_
|
||||
*пишется по ходу*
|
||||
|
||||
## 7. Соседи
|
||||
|
||||
_пишется по ходу_
|
||||
*пишется по ходу*
|
||||
|
||||
## 8. Мои ошибки
|
||||
|
||||
_пишется по ходу_
|
||||
*пишется по ходу*
|
||||
|
||||
## 9. Что осталось незакрытым
|
||||
|
||||
_пишется по ходу_
|
||||
*пишется по ходу*
|
||||
|
||||
Reference in New Issue
Block a user