From 9efe4d5c27f906ad6beca9da13e567432feb62f9 Mon Sep 17 00:00:00 2001 From: Matt Van Horn Date: Wed, 2 Sep 2026 02:49:47 -0700 Subject: [PATCH] fix: Enable Zabbix ID deduplication (#6745) Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> --- .../zabbix_provider/zabbix_provider.py | 1 + tests/test_provider_factory.py | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/keep/providers/zabbix_provider/zabbix_provider.py b/keep/providers/zabbix_provider/zabbix_provider.py index 6e92a6a638..8cef5acba1 100644 --- a/keep/providers/zabbix_provider/zabbix_provider.py +++ b/keep/providers/zabbix_provider/zabbix_provider.py @@ -63,6 +63,7 @@ class ZabbixProvider(BaseProvider): """ PROVIDER_CATEGORY = ["Monitoring"] + FINGERPRINT_FIELDS = ["id"] KEEP_ZABBIX_WEBHOOK_INTEGRATION_NAME = "keep" # keep-zabbix KEEP_ZABBIX_WEBHOOK_SCRIPT_FILENAME = ( "zabbix_provider_script.js" # zabbix mediatype script file diff --git a/tests/test_provider_factory.py b/tests/test_provider_factory.py index 290cae6312..255adedc30 100644 --- a/tests/test_provider_factory.py +++ b/tests/test_provider_factory.py @@ -1,11 +1,19 @@ -from datetime import datetime import inspect +from datetime import datetime from typing import Optional, Union +from unittest.mock import patch + +import pytest from keep.api.core.dependencies import SINGLE_TENANT_UUID from keep.api.models.db.provider import Provider from keep.providers.providers_factory import ProvidersFactory -from unittest.mock import patch + + +@pytest.fixture +def isolated_provider_factory_caches(monkeypatch): + monkeypatch.setattr(ProvidersFactory, "_loaded_providers_cache", None) + monkeypatch.setattr(ProvidersFactory, "_loaded_deduplication_rules_cache", None) class TestProviderFactoryMethodParam: @@ -65,3 +73,19 @@ def test_provider_factory_is_using_config_key_from_db(db_session): ProvidersFactory.get_installed_providers(tenant_id=SINGLE_TENANT_UUID) assert mock_secret_manager.return_value.read_secret.call_args[1]['secret_name'] == custom_configuration_key + +def test_zabbix_default_fingerprint_fields_and_rule(isolated_provider_factory_caches): + assert ProvidersFactory._loaded_providers_cache is None + assert ProvidersFactory._loaded_deduplication_rules_cache is None + + providers = ProvidersFactory.get_all_providers(ignore_cache_file=True) + zabbix_provider = next( + provider for provider in providers if provider.type == "zabbix" + ) + + assert zabbix_provider.default_fingerprint_fields == ["id"] + + default_rules = ProvidersFactory.get_default_deduplication_rules() + zabbix_rule = next(rule for rule in default_rules if rule.provider_type == "zabbix") + + assert zabbix_rule.fingerprint_fields == ["id"]