-
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:Claude Opus 5 <noreply@anthropic.com>
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:Claude Opus 5 <noreply@anthropic.com>
Loading