Аня Морозова – Общий ритм (страница 3)
Павел приехал к вечеру. Увидел отключённую стойку, ничего не сказал, открыл свой ноутбук и начал проверять конфигурацию. Работали молча. Иногда он задавал короткий технический вопрос, Ася отвечала. Ксюша написала в мессенджере: «Скажи, если нужна помощь с коммуникацией для клиники». Ася ответила: «Пока не нужно. Сначала факты».
К семи часам стало ясно: часть расхождения объяснялась перезапуском оборудования. Система обновляла время при каждом перезапуске, но не всегда синхронизировалась с сервером клиники. Настенный монитор работал от внутренних часов и не сверялся ни с чем. Ноутбук Аси — от системного времени, которое могло отставать при выходе из спящего режима. Три независимых источника, ни один из которых не был эталоном.
Этим объяснялась часть расхождений. Но не все.
В одном случае разница составила шестнадцать секунд — между двумя событиями, записанными одним и тем же устройством. Перезапуска в этот момент не было. Ася выделила это место в журнале и написала: «Причина неизвестна. Требуется отдельная проверка».
Кирилл зашёл в ординаторскую, когда смена уже заканчивалась. Он не сел, встал у двери.
— Что нашла?
— Перезапуск объясняет часть. Но не всё. Есть расхождение, которое я пока не могу объяснить.
— Сколько времени нужно?
— Не знаю. День‑два на проверку. Может, больше.
Кирилл кивнул. Он не стал говорить, что это плохо или что проект под угрозой. Он спросил:
— Ты записала всё, что нужно для проверки?
— Да. Журналы, логи, показания монитора. Всё сохранено.
— Тогда поехали. Тебе нужно уехать отсюда, а не сидеть до утра.
Ася хотела возразить, но поняла, что он прав. Глаза уже слипались, а таблица расхождений начала двоиться.
На улице лило. Не дождь — стена воды. Ася вышла из клиники под козырёк, раскрыла зонт, и ветер тут же вывернул его. Кирилл остановился рядом, поднял воротник.
— Транспорт встал, — сказал он. — Я подброшу до метро.
Машина была обычная, не служебная. Серый кузов, на заднем сиденье — детское кресло. Ася заметила его и не стала спрашивать. Кирилл убрал с переднего пассажирского сиденья свёрток с формой и положил на заднее.
Ехали медленно. Дворники едва справлялись, дороги блестели, фонари отражались в лужах. Ася смотрела в окно. Кирилл вёл машину сосредоточенно, без музыки, без разговоров. Молчание не требовало объяснений. После восьми часов с журналами и таблицами Ася не хотела говорить. И он не просил.
У светофора Кирилл остановился у киоска.
— Подождёшь минуту?
Он вышел и вернулся с двумя сэндвичами в прозрачной плёнке. Положил один Асе на колени.
— Ешь. Ты с обеда ничего не ела.
Ася хотела сказать, что не голодна, но развернула плёнку и откусила. Хлеб был мягкий, ветчина тёплая. Она поняла, что голодна. Очень.
Кирилл ел за рулём, придерживая его одной рукой. У метро он остановился, но мотор не заглушил.
— Мы не знаем, что именно произошло, — сказала Ася.
— Пока не знаем, — ответил Кирилл. — Это не значит, что мы не узнаем.
Он сказал это без утешения. Просто факт. Ася посмотрела на него: тёмный силуэт на фоне мокрого стекла, фонарь за окном очерчивал профиль. Тени под глазами были глубже, чем утром.
— У тебя есть мой рабочий номер, — сказала она. — Но если что‑то по журналам — лучше писать на личный.
Она продиктовала номер. Кирилл ввёл его в телефон и кивнул. Потом набрал номер — из сумки Аси донёсся короткий сигнал.
— Теперь у тебя есть мой, — сказал он.
— Спасибо за сэндвич, — сказала она.
— Спасибо за журналы, — ответил он.
Она вышла из машины и пошла к метро, раскрыв зонт.
Дома Ася скинула мокрую куртку, поставила чайник и села на кухне с раскрытым блокнотом. Она дописывала рабочие заметки, когда из сумки донёсся сигнал. Ася достала телефон: сообщение пришло с незнакомого номера — «Ты добралась?» Она сохранила номер как «Кирилл» и ответила: «Да, добралась. Спасибо».
Ответ пришёл через минуту: «Хорошо».
Ася убрала телефон и закрыла глаза. Чайник щёлкнул. Сегодня Кирилл не назвал её пчёлкой. Ася поймала себя на том, что заметила это.
Перед сном она раскрыла блокнот и записала: «Расхождение 16 сек — причина неизвестна. Перезапуск объясняет часть. Проверить синхронизацию с сервером клиники. Сэндвич был хорошим».
Последнюю строку она перечитала, хотела зачеркнуть. Не стала.
Глава 4. Несовпадение
Они встретились в ординаторской в девять утра. Кирилл принёс бумажный журнал отделения, Ася — ноутбук с логами и распечатки с временными метками. На столе легли три ряда данных: система, настенный монитор, ручные записи медсестёр.
Начали с инцидента в палате № 7. Ася выстроила последовательность: сигнал в логах — 14:32:07, отображение на панели — 14:32:21, запись медсестры в журнале — 14:32:18. Кирилл ткнул пальцем в бумажную запись.
— Медсестра записала 14:32:18, — сказал он. — Она смотрела на настенные часы.
— Которые показывали 14:32:21, — ответила Ася.
— Получается, она записала на три секунды раньше, чем часы показывали. Человеческая погрешность.
— Или часы в коридоре отставали от часов у монитора, — предположила Ася.
Кирилл посмотрел на неё.
— Два разных часа в одном отделении?
— Бывало и хуже, — сказала Ася.
Они двинулись назад по дням. Ася открывала лог за логом, Кирилл сверял с записями смены. Часть расхождений ложилась на перезапуск: после каждого обновления система брала время с сервера клиники, но сервер не всегда отвечал мгновенно. Иногда задержка составляла секунды, иногда — больше. Настенный монитор жил своей жизнью, отставая на пять-восемь секунд от сервера. Ноутбук Аси — на две-три секунды, в зависимости от спящего режима.
К обеду они разобрали первый и второй дни. Семнадцать случаев. Двенадцать объяснялись перезапуском и рассинхронизацией. Пять — нет.
Ася выделила пять необъяснённых случаев в отдельную таблицу. Все пять — после перезапуска, когда система уже должна была взять верное время. Расхождение — от шести до шестнадцати секунд. Ни закономерности, ни повтора.
— Кто имеет доступ к серверу? — спросил Кирилл.
— Из нашей команды, я и Павел, — ответила Ася. — Из клиники, безопасник и техподдержка. Доступ подрядчика ограничен диагностическим режимом.
— Проверь, кто заходил в эти моменты.
— Проверю. Но логи доступа тоже с того же сервера. Если время на сервере «гуляет», логи доступа тоже ненадёжны.
Кирилл откинулся на стуле. Не раздражённо — задумчиво. Он привык работать с фактами, а здесь факты зависели от инструмента, который сам был под вопросом.
— Давай пока не строить гипотез, — сказал он. — Запишем то, что подтверждено. Остальное — отдельной строкой.
Ася кивнула и написала в отчёте: «Подтверждённые расхождения: 12 из 17. Причина: рассинхронизация часов при перезапуске. Неподтверждённые: 5 из 17. Причина: требуется отдельная проверка. Доступ к серверу: проверить журнал входов».
Письмо пришло в два часа дня. Ася увидела его на рабочем адресе, когда вернулась к ноутбуку после перерыва. Отправитель — безымянный, адрес зарегистрирован в иностранном домене. Тема: «Важно». Тело сообщения — одна строка:
«Не списывайте все расхождения на перезапуски».
Вложение было файлом без расширения. В письме не было ни имени, ни подписи. Ася не стала строить догадок об авторе.
Она не стала открывать вложение, сохранила письмо, сделала скриншот и позвонила безопаснику клиники. Тот попросил переслать заголовки и не открывать вложение до проверки. Ася ответила согласием.
Через пятнадцать минут она написала Кириллу: «Нужно поговорить. Не по телефону».
Он ответил через три минуты: «В пять, в ординаторской».
Ася показала ему письмо на экране. Кирилл прочитал дважды.