Механизм восполнения пробелов в метриках
Проблема
Метрики поступают в агент неравномерно. Некоторые устройства не могут прислать метрики из-за проблем с сетью или по причине того что они выключены. Для исключения пробелов в метриках был реализован механизм восполнения пробелов в метриках
Реализация
Для реализации механизма понадобилось переработать хранение метрик в локальной базе агента - удаление метрик после отправки заменил на установку флага синхронизации. Сами метрики хранятся в локальной базе агента в течении N дней (задается в переменной CFG_AGENT_METRICS_AGE_MAX_DAYS).
В механизме используются следующие сущности метрики:
- start_timestamp - начальное время данных метрики
- end_timestamp - конечное время данных метрики
- device_id - id устройства с которого пришла метрика
gap_checker производит анализ метрик в локальной базе
- CHECKER_PERIOD_END - конец промежутка анализируемых метрик - текущий момент
- CHECKER_PERIOD_START - начало промежутка анализируемых метрик. CHECKER_PERIOD_END - N дней (задается в переменной CFG_AGENT_METRICS_CHECK_GAPS_DAYS (по умолчанию = 3))
Промежуток времени не содержит метрики если истинно одно из условий
- если от CHECKER_PERIOD_START минимального start_timestamp нет ни одной метрики
- если от end_timestamp до start_timestamp следующей метрики нет ни одной метрики
Механизм работает следующим образом:
- По расписанию (задается в переменной CFG_AGENT_METRICS_CHECK_GAPS_CRON) запускается функция выявления пробелов (далее gap_checker)
- При CFG_AGENT_METRICS_CHECK_GAPS_ENABLED != 1 выполнение завершается
- Для каждого зарегистрированного (is_new == False) устройства с выключенным пассивным режимом и поддерживающим команду upload_data gap_checker просматривает все метрики в локальной базе за промежуток с CHECKER_PERIOD_START до CHECKER_PERIOD_END.
- Если gap_checker находит промежутки времени, не содержащие ни одной метрики
- Скачивание исторических данных с устройства по каждому промежутку
No Comments