diff --git a/engine/apps/api/serializers/channel_filter.py b/engine/apps/api/serializers/channel_filter.py index 8987374f..335a816b 100644 --- a/engine/apps/api/serializers/channel_filter.py +++ b/engine/apps/api/serializers/channel_filter.py @@ -27,6 +27,7 @@ class ChannelFilterSerializer(OrderedModelSerializerMixin, EagerLoadingMixin, se ) order = serializers.IntegerField(required=False) filtering_term_as_jinja2 = serializers.SerializerMethodField() + filtering_term = serializers.CharField(required=False, allow_null=True, allow_blank=True) SELECT_RELATED = ["escalation_chain", "alert_receive_channel"] @@ -49,7 +50,6 @@ class ChannelFilterSerializer(OrderedModelSerializerMixin, EagerLoadingMixin, se "filtering_term_as_jinja2", ] read_only_fields = ["created_at", "is_default"] - extra_kwargs = {"filtering_term": {"required": True, "allow_null": False}} def validate(self, data): filtering_term = data.get("filtering_term") @@ -123,6 +123,7 @@ class ChannelFilterSerializer(OrderedModelSerializerMixin, EagerLoadingMixin, se class ChannelFilterCreateSerializer(ChannelFilterSerializer): alert_receive_channel = OrganizationFilteredPrimaryKeyRelatedField(queryset=AlertReceiveChannel.objects) slack_channel = serializers.CharField(allow_null=True, required=False, source="slack_channel_id") + filtering_term = serializers.CharField(required=False, allow_null=True, allow_blank=True) class Meta: model = ChannelFilter @@ -142,7 +143,6 @@ class ChannelFilterCreateSerializer(ChannelFilterSerializer): "notification_backends", ] read_only_fields = ["created_at", "is_default"] - extra_kwargs = {"filtering_term": {"required": True, "allow_null": False}} def to_representation(self, obj): """add correct slack channel data to result after instance creation/update""" diff --git a/grafana-plugin/src/containers/IntegrationContainers/CollapsedIntegrationRouteDisplay/CollapsedIntegrationRouteDisplay.tsx b/grafana-plugin/src/containers/IntegrationContainers/CollapsedIntegrationRouteDisplay/CollapsedIntegrationRouteDisplay.tsx index 2a712ec1..5ed66ecc 100644 --- a/grafana-plugin/src/containers/IntegrationContainers/CollapsedIntegrationRouteDisplay/CollapsedIntegrationRouteDisplay.tsx +++ b/grafana-plugin/src/containers/IntegrationContainers/CollapsedIntegrationRouteDisplay/CollapsedIntegrationRouteDisplay.tsx @@ -67,11 +67,21 @@ const CollapsedIntegrationRouteDisplay: React.FC {routeWording === 'Default' && Unmatched alerts routed to default route} - {routeWording !== 'Default' && channelFilter.filtering_term && ( - - {channelFilter.filtering_term} - - )} + {routeWording !== 'Default' && + (channelFilter.filtering_term ? ( + + {channelFilter.filtering_term} + + ) : ( + <> +
+ +
+ + Routing template not set + + + ))}
@@ -100,8 +110,10 @@ const CollapsedIntegrationRouteDisplay: React.FC - - Trigger escalation chain: + + + Trigger escalation chain + {escalationChain?.name && ( - - {escalationChain?.name} - + {escalationChain?.name} )} @@ -120,7 +130,7 @@ const CollapsedIntegrationRouteDisplay: React.FC
- No Escalation chain selected + Not selected )} diff --git a/grafana-plugin/src/containers/IntegrationContainers/ExpandedIntegrationRouteDisplay/ExpandedIntegrationRouteDisplay.tsx b/grafana-plugin/src/containers/IntegrationContainers/ExpandedIntegrationRouteDisplay/ExpandedIntegrationRouteDisplay.tsx index 2569d2f0..e9d55726 100644 --- a/grafana-plugin/src/containers/IntegrationContainers/ExpandedIntegrationRouteDisplay/ExpandedIntegrationRouteDisplay.tsx +++ b/grafana-plugin/src/containers/IntegrationContainers/ExpandedIntegrationRouteDisplay/ExpandedIntegrationRouteDisplay.tsx @@ -104,6 +104,9 @@ const ExpandedIntegrationRouteDisplay: React.FC; @@ -153,7 +156,7 @@ const ExpandedIntegrationRouteDisplay: React.FCRouting Template
{ const handleSubmit = useCallback(() => { if (template.isRoute) { - if (changedTemplateBody) { - onUpdateRoute({ [template.name]: changedTemplateBody }, channelFilterId); - onHide(); - } else { - openErrorNotification('Route template body can not be empty'); - } + onUpdateRoute({ [template.name]: changedTemplateBody }, channelFilterId); + onHide(); } else { onUpdateTemplates({ [template.name]: changedTemplateBody }); onHide(); @@ -136,7 +131,7 @@ const IntegrationTemplate = observer((props: IntegrationTemplateProps) => { case 'Grouping': case 'Autoresolve': return groupingTemplateCheatSheet; - case 'Web titile': + case 'Web title': case 'Web message': case 'Web image': return webTitleTemplateCheatSheet; diff --git a/grafana-plugin/src/pages/integration_2/Integration2.tsx b/grafana-plugin/src/pages/integration_2/Integration2.tsx index 66bff4a7..585126b9 100644 --- a/grafana-plugin/src/pages/integration_2/Integration2.tsx +++ b/grafana-plugin/src/pages/integration_2/Integration2.tsx @@ -86,7 +86,7 @@ interface Integration2State extends PageBaseState { const ACTIONS_LIST_WIDTH = 200; const ACTIONS_LIST_BORDER = 2; -const NEW_ROUTE_DEFAULT = '{# (payload.severity == "foo" and "bar" in payload.region) or True #}'; +const NEW_ROUTE_DEFAULT = ''; @observer class Integration2 extends React.Component {