Skip to content
  • Nurlykhan Kairly's avatar
    40d9d98f
    feat: таблица настроек — значения без редеплоя, со снимком прежних · 40d9d98f
    Nurlykhan Kairly authored
    
    
    Колонка 4 каталога («что показать УИБ») и сравнение «что должно быть / что есть»
    уже лежали в базе: evidence_fields у правила, evidence + observed_value /
    threshold_value / baseline_value у аномалии, ИИН, ФИО, IP и session_id —
    отдельными колонками. Пороги конкретного правила тоже: они пишутся в
    app/anomaly_specs.py, но только как дефолт первого засева, дальше это колонки
    anomaly_rules, правятся в админке и снимаются в anomaly_rule_revisions.
    
    Чего не хватало — таблицы для величин, НЕ привязанных к одному правилу. Они
    сидели в env и в константах кода, то есть менялись только редеплоем.
    
    app_settings хранит:
      * общее — часовой пояс расчётов, флаг автозасева;
      * дефолты НОВОГО правила — окно, порог, пауза, важность;
      * дефолты параметров детекторов — ночные часы, предельная скорость,
        глубина памяти о прежних IP, окно и кратность базовой нормы.
    
    Общей настройки «порог» нет намеренно: «двадцать разных ИИН» и «пятьдесят
    скачиваний» — разные величины, и сводить пятнадцать кейсов к одному числу
    значило бы сломать каталог.
    
    Настройка — дефолт для НОВЫХ правил, существующие она не трогает: у них свои
    значения в колонках. Явно присланное поле всегда сильнее дефолта.
    
    Каждая правка пишет строку в app_setting_revisions с прежним значением, автором и
    комментарием — и через REST, и через админку. Аномалии это не задевает: у них своё
    threshold_value, зафиксированное в момент обнаружения.
    
    Значения из core/config.py остались подстраховкой на случай пустой таблицы: сервис
    обязан подниматься до того, как настройки засеяны. Засев идёт первым — из настроек
    правила берут дефолты.
    
    Значение проверяется по объявленному типу и границам одним кодом на REST и
    админку: часовой пояс должен существовать, важность быть из enum, ночные часы —
    двумя числами 0..23. Ключ, тип и границы формой не правятся: их читает код.
    
    Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
    40d9d98f
    feat: таблица настроек — значения без редеплоя, со снимком прежних
    Nurlykhan Kairly authored
    
    
    Колонка 4 каталога («что показать УИБ») и сравнение «что должно быть / что есть»
    уже лежали в базе: evidence_fields у правила, evidence + observed_value /
    threshold_value / baseline_value у аномалии, ИИН, ФИО, IP и session_id —
    отдельными колонками. Пороги конкретного правила тоже: они пишутся в
    app/anomaly_specs.py, но только как дефолт первого засева, дальше это колонки
    anomaly_rules, правятся в админке и снимаются в anomaly_rule_revisions.
    
    Чего не хватало — таблицы для величин, НЕ привязанных к одному правилу. Они
    сидели в env и в константах кода, то есть менялись только редеплоем.
    
    app_settings хранит:
      * общее — часовой пояс расчётов, флаг автозасева;
      * дефолты НОВОГО правила — окно, порог, пауза, важность;
      * дефолты параметров детекторов — ночные часы, предельная скорость,
        глубина памяти о прежних IP, окно и кратность базовой нормы.
    
    Общей настройки «порог» нет намеренно: «двадцать разных ИИН» и «пятьдесят
    скачиваний» — разные величины, и сводить пятнадцать кейсов к одному числу
    значило бы сломать каталог.
    
    Настройка — дефолт для НОВЫХ правил, существующие она не трогает: у них свои
    значения в колонках. Явно присланное поле всегда сильнее дефолта.
    
    Каждая правка пишет строку в app_setting_revisions с прежним значением, автором и
    комментарием — и через REST, и через админку. Аномалии это не задевает: у них своё
    threshold_value, зафиксированное в момент обнаружения.
    
    Значения из core/config.py остались подстраховкой на случай пустой таблицы: сервис
    обязан подниматься до того, как настройки засеяны. Засев идёт первым — из настроек
    правила берут дефолты.
    
    Значение проверяется по объявленному типу и границам одним кодом на REST и
    админку: часовой пояс должен существовать, важность быть из enum, ночные часы —
    двумя числами 0..23. Ключ, тип и границы формой не правятся: их читает код.
    
    Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
Loading