From b50b10d491557c27ee801ac8b25cd8f8362580b9 Mon Sep 17 00:00:00 2001 From: Yulia Shanyrova Date: Thu, 8 Jun 2023 17:20:46 +0200 Subject: [PATCH 1/2] fix for templates for routes (#2136) # What this PR does - Wrong behaviour after saving Route template fix - Add notification/error when try to save empty template for routes. --- .../EditRegexpRouteTemplateModal.module.css | 4 ++++ .../EditRegexpRouteTemplateModal.tsx | 14 +++++++++++--- .../IntegrationTemplate/IntegrationTemplate.tsx | 17 ++++++++++++----- .../src/pages/integration_2/Integration2.tsx | 4 +++- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/grafana-plugin/src/containers/EditRegexpRouteTemplateModal/EditRegexpRouteTemplateModal.module.css b/grafana-plugin/src/containers/EditRegexpRouteTemplateModal/EditRegexpRouteTemplateModal.module.css index 988421d5..273537df 100644 --- a/grafana-plugin/src/containers/EditRegexpRouteTemplateModal/EditRegexpRouteTemplateModal.module.css +++ b/grafana-plugin/src/containers/EditRegexpRouteTemplateModal/EditRegexpRouteTemplateModal.module.css @@ -2,6 +2,10 @@ width: 100%; } +.regexp-template-code-error { + border: var(--error-text-color) 1px solid; +} + .regexp-template-editor-modal { width: 700px; } diff --git a/grafana-plugin/src/containers/EditRegexpRouteTemplateModal/EditRegexpRouteTemplateModal.tsx b/grafana-plugin/src/containers/EditRegexpRouteTemplateModal/EditRegexpRouteTemplateModal.tsx index c7f2390f..7ad74676 100644 --- a/grafana-plugin/src/containers/EditRegexpRouteTemplateModal/EditRegexpRouteTemplateModal.tsx +++ b/grafana-plugin/src/containers/EditRegexpRouteTemplateModal/EditRegexpRouteTemplateModal.tsx @@ -12,6 +12,7 @@ import Text from 'components/Text/Text'; import { AlertReceiveChannel } from 'models/alert_receive_channel/alert_receive_channel.types'; import { ChannelFilter } from 'models/channel_filter/channel_filter.types'; import { useStore } from 'state/useStore'; +import { openErrorNotification } from 'utils'; import styles from './EditRegexpRouteTemplateModal.module.css'; @@ -33,6 +34,7 @@ const EditRegexpRouteTemplateModal = observer((props: EditRegexpRouteTemplateMod const regexpBody = store.alertReceiveChannelStore.channelFilters[channelFilterId]?.filtering_term; const [regexpTemplateBody, setRegexpTemplateBody] = useState(regexpBody); + const [showErrorTemplate, setShowErrorTemplate] = useState(false); const templateJinja2Body = store.alertReceiveChannelStore.channelFilters[channelFilterId]?.filtering_term_as_jinja2; @@ -40,14 +42,20 @@ const EditRegexpRouteTemplateModal = observer((props: EditRegexpRouteTemplateMod const handleRegexpBodyChange = () => { return debounce((value: string) => { + setShowErrorTemplate(false); setRegexpTemplateBody(value); }, 1000); }; const handleSave = useCallback(() => { - onUpdateRoute({ ['route_template']: regexpTemplateBody }, channelFilterId, 0); + if (!regexpTemplateBody) { + setShowErrorTemplate(true); + openErrorNotification('Route template body can not be empty'); + } else { + onUpdateRoute({ ['route_template']: regexpTemplateBody }, channelFilterId, 0); - onHide(); + onHide(); + } }, [regexpTemplateBody]); const handleConvertToJinja2 = useCallback(() => { @@ -87,7 +95,7 @@ const EditRegexpRouteTemplateModal = observer((props: EditRegexpRouteTemplateMod -
+
{ ); const handleSubmit = useCallback(() => { - template.isRoute - ? onUpdateRoute({ [template.name]: changedTemplateBody }, channelFilterId) - : onUpdateTemplates({ [template.name]: changedTemplateBody }); - - onHide(); + if (template.isRoute) { + if (changedTemplateBody) { + onUpdateRoute({ [template.name]: changedTemplateBody }, channelFilterId); + onHide(); + } else { + openErrorNotification('Route template body can not be empty'); + } + } else { + onUpdateTemplates({ [template.name]: changedTemplateBody }); + onHide(); + } }, [onUpdateTemplates, changedTemplateBody]); const getCheatSheet = (templateName) => { diff --git a/grafana-plugin/src/pages/integration_2/Integration2.tsx b/grafana-plugin/src/pages/integration_2/Integration2.tsx index 1f52a26d..20500b75 100644 --- a/grafana-plugin/src/pages/integration_2/Integration2.tsx +++ b/grafana-plugin/src/pages/integration_2/Integration2.tsx @@ -346,7 +346,9 @@ class Integration2 extends React.Component this.setState({ isEditTemplateModalOpen: undefined, }); - this.setState({ isTemplateSettingsOpen: true }); + if (selectedTemplate?.name !== 'route_template') { + this.setState({ isTemplateSettingsOpen: true }); + } LocationHelper.update({ template: undefined, routeId: undefined }, 'partial'); }} channelFilterId={channelFilterIdForEdit} From f14179b9b02585463bb455bda692e44f297c70f9 Mon Sep 17 00:00:00 2001 From: Ildar Iskhakov Date: Thu, 8 Jun 2023 23:31:18 +0800 Subject: [PATCH 2/2] Fix demo-payload (#2139) # What this PR does ## Which issue(s) this PR fixes ## Checklist - [ ] Unit, integration, and e2e (if applicable) tests updated - [ ] Documentation added (or `pr:no public docs` PR label added if not required) - [ ] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not required) --- engine/apps/api/serializers/alert_receive_channel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/apps/api/serializers/alert_receive_channel.py b/engine/apps/api/serializers/alert_receive_channel.py index 3fdb8c03..ad86fdb4 100644 --- a/engine/apps/api/serializers/alert_receive_channel.py +++ b/engine/apps/api/serializers/alert_receive_channel.py @@ -49,7 +49,7 @@ class AlertReceiveChannelSerializer(EagerLoadingMixin, serializers.ModelSerializ heartbeat = serializers.SerializerMethodField() allow_delete = serializers.SerializerMethodField() description_short = serializers.CharField(max_length=250, required=False, allow_null=True) - demo_alert_payload = serializers.CharField(source="config.example_payload", read_only=True) + demo_alert_payload = serializers.JSONField(source="config.example_payload", read_only=True) routes_count = serializers.SerializerMethodField() connected_escalations_chains_count = serializers.SerializerMethodField()