diff --git a/cmk/gui/wato/pages/notifications/modes.py b/cmk/gui/wato/pages/notifications/modes.py index 812fc4ceb5c..4bda35232ec 100644 --- a/cmk/gui/wato/pages/notifications/modes.py +++ b/cmk/gui/wato/pages/notifications/modes.py @@ -6,6 +6,7 @@ import abc import json +import re import time from collections.abc import Collection, Generator, Iterator, Mapping from copy import deepcopy @@ -3034,10 +3035,17 @@ def _get_parameter_rulesets( self, all_parameters: NotificationParameterSpecs, ) -> Generator[Rule]: + search_term = request.get_str_input("search", "") + search_term = search_term.lower() if search_term else "" + match_regex = re.compile(search_term, re.IGNORECASE) for script_name, title in notification_script_choices(): # Not all notification scripts have parameters if script_name not in notification_parameter_registry: continue + + if not match_regex.search(title): + continue + method_parameters: dict[NotificationParameterID, NotificationParameterItem] | None = ( all_parameters.get(script_name) ) @@ -3056,18 +3064,21 @@ def _get_parameter_rulesets( def _get_notification_parameters_data(self) -> NotificationParametersOverview: all_parameters = NotificationParameterConfigFile().load_for_reading() + filtered_parameters = list(self._get_parameter_rulesets(all_parameters)) return NotificationParametersOverview( parameters=[ RuleSection( i18n=_("Parameters for"), - topics=[ - RuleTopic( - i18n=None, - rules=list(self._get_parameter_rulesets(all_parameters)), - ) - ], + topics=[RuleTopic(i18n=None, rules=filtered_parameters)], ) ] + if filtered_parameters + else [], + i18n={ + "no_parameter_match": _( + "Found no matching parameters. Please try another search term." + ) + }, ) diff --git a/cmk/gui/watolib/notification_types.py b/cmk/gui/watolib/notification_types.py index 6ac28ff2350..9327f84a9c0 100644 --- a/cmk/gui/watolib/notification_types.py +++ b/cmk/gui/watolib/notification_types.py @@ -12,7 +12,7 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Optional +from typing import Any, Optional @dataclass(kw_only=True) @@ -94,6 +94,7 @@ class Notifications: @dataclass(kw_only=True) class NotificationParametersOverview: parameters: list[RuleSection] + i18n: dict[str, Any] @dataclass(kw_only=True) diff --git a/packages/cmk-frontend-vue/src/main.ts b/packages/cmk-frontend-vue/src/main.ts index 55ce638c5d0..00c2f70baa2 100644 --- a/packages/cmk-frontend-vue/src/main.ts +++ b/packages/cmk-frontend-vue/src/main.ts @@ -68,7 +68,8 @@ function setupVue() { } case 'notification_parameters_overview': { app = createApp(NotificationParametersOverviewApp, { - parameters: appData.parameters + parameters: appData.parameters, + i18n: appData.i18n }) break } diff --git a/packages/cmk-frontend-vue/src/notification/NotificationParametersOverviewApp.vue b/packages/cmk-frontend-vue/src/notification/NotificationParametersOverviewApp.vue index 1e1dc8979fd..64b86a35a96 100644 --- a/packages/cmk-frontend-vue/src/notification/NotificationParametersOverviewApp.vue +++ b/packages/cmk-frontend-vue/src/notification/NotificationParametersOverviewApp.vue @@ -9,11 +9,23 @@ import type { RuleSection } from '@/notification/type_defs' defineProps<{ parameters: RuleSection[] + i18n: Record }>() diff --git a/packages/cmk-frontend-vue/src/notification/type_defs.ts b/packages/cmk-frontend-vue/src/notification/type_defs.ts index 2097feb7ad0..96cab699b25 100644 --- a/packages/cmk-frontend-vue/src/notification/type_defs.ts +++ b/packages/cmk-frontend-vue/src/notification/type_defs.ts @@ -71,6 +71,7 @@ export interface Rule { } export interface NotificationParametersOverview { parameters: RuleSection1[]; + i18n: {}; } export interface RuleSection1 { i18n: string; diff --git a/packages/cmk-shared-typing/source/notifications.json b/packages/cmk-shared-typing/source/notifications.json index 1345c678e72..d8a048f7d2b 100644 --- a/packages/cmk-shared-typing/source/notifications.json +++ b/packages/cmk-shared-typing/source/notifications.json @@ -47,9 +47,15 @@ "type": "object", "$ref": "#/$defs/rule_section" } + }, + "i18n": { + "type": "object", + "no_parameter_match": { + "type": "string" + } } }, - "required": ["parameters"] + "required": ["parameters", "i18n"] }, "fallback_warning": { "type": "object",