Решите домашнюю задачу: дан лог результатов проверки доступности хостов кластерной СУБД (ts, host, status = UP/DOWN). Для каждого дня посчитать время, в течение которого хотя бы один хост был недоступен; проверки происходят раз в 30 секунд.

Нужно объединить интервалы недоступности всех хостов и измерить их пересечение с каждым днём. Складывать время каждого хоста нельзя: одновременные отказы посчитаются несколько раз.

Короткий ответ

Что ответить на собеседовании

Нужно объединить интервалы недоступности всех хостов и измерить их пересечение с каждым днём. Складывать время каждого хоста нельзя: одновременные отказы посчитаются несколько раз.

Подробный разбор

Ответ с пояснениями

Нужно объединить интервалы недоступности всех хостов и измерить их пересечение с каждым днём. Складывать время каждого хоста нельзя: одновременные отказы посчитаются несколько раз.

Примите явную модель: статус действует от проверки до следующей проверки этого хоста. По каждому host отсортируйте ts и через LEAD получите интервалы [ts, next_ts); оставьте DOWN. Последний интервал ограничьте концом наблюдения по согласованному правилу.

сортировать DOWN-интервалы по началу
для каждого [start, end):
    если start <= конец последнего объединённого:
        продлить его конец до max(конец, end)
    иначе добавить новый интервал
разрезать объединённые интервалы по границам дней
сложить длительности фрагментов для каждого дня

Добавьте календарь, чтобы показать дни с нулём. Пропуски проверок требуют отдельного состояния «нет данных». Точный момент сбоя между проверками неизвестен: результат является оценкой по выбранной модели, а не измерением с секундной точностью.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее