Skip to main content

Механизм восполнения пробелов в метриках

Проблема

Метрики поступают в агент неравномерно. Некоторые устройства не могут прислать метрики из-за проблем с сетью или по причине того что они выключены. Для исключения пробелов в метриках был реализован механизм восполнения пробелов в метриках

Реализация

Для реализации механизма понадобилось переработать хранение метрик в локальной базе агента - удаление метрик после отправки заменил на установку флага синхронизации. Сами метрики хранятся в локальной базе агента в течении 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 следующей метрики нет ни одной метрики

Механизм работает следующим образом:

  1. По расписанию (задается в переменной CFG_AGENT_METRICS_CHECK_GAPS_CRON) запускается функция выявления пробелов (далее gap_checker)
  2. При CFG_AGENT_METRICS_CHECK_GAPS_ENABLED != 1 выполнение завершается
  3. Для каждого зарегистрированного (is_new == False) устройства с выключенным пассивным режимом и поддерживающим команду upload_data gap_checker просматривает все метрики в локальной базе за промежуток с CHECKER_PERIOD_START до CHECKER_PERIOD_END.
  4. Если gap_checker находит промежутки времени, не содержащие ни одной метрики
    1. Скачивание исторических данных с устройства по каждому промежутку