web-interface.assets.1255d548-539.e8e74e871af5eba82414.js.map Maven / Gradle / Ivy
{"version":3,"file":"1255d548-539.e8e74e871af5eba82414.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventConditionForm.css","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventDefinitionSummary.css","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/FieldsList.css","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/NotificationsForm.css","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/CommonFieldValueProviderSummary.css","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/TemplateFieldValueProviderPreview.css","webpack://graylog-web-interface/./src/components/event-definitions/constants.ts","webpack://graylog-web-interface/./src/stores/event-definitions/AvailableEventDefinitionTypesStore.js","webpack://graylog-web-interface/./src/components/event-definitions/hooks/useEventDefinitionConfigFromLocalStorage.ts","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventDetailsForm.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventConditionForm.css?65c2","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventConditionForm.tsx","webpack://graylog-web-interface/./src/components/event-definitions/common/EventKeyHelpPopover.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/FieldForm.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/FieldsList.css?aeea","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/FieldsList.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/TemplateFieldValueProviderPreview.css?19b8","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/TemplateFieldValueProviderPreview.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/TemplateFieldValueProviderForm.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/CommonFieldValueProviderSummary.css?f8c3","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/CommonFieldValueProviderSummary.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/TemplateFieldValueProviderSummary.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/LookupTableFieldValueProviderForm.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/LookupTableFieldValueProviderFormContainer.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/LookupTableFieldValueProviderSummary.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/field-value-providers/index.js","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/FieldsForm.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/AddNotificationForm.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/NotificationSettingsForm.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/NotificationList.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/NotificationsForm.css?d902","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/NotificationsForm.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventDefinitionForm.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventDefinitionFormContainer.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventDefinitionValidationSummary.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventDefinitionSummary.css?9f94","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EventDefinitionSummary.tsx","webpack://graylog-web-interface/./src/components/event-notifications/event-notification-form/EventNotificationForm.jsx","webpack://graylog-web-interface/./src/components/event-notifications/event-notification-form/EventNotificationFormContainer.jsx","webpack://graylog-web-interface/./src/logic/alerts/EventDefinitionPriorityEnum.js","webpack://graylog-web-interface/./src/routing/withHistory.tsx","webpack://graylog-web-interface/./node_modules/lodash/clone.js"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.bK_1OgMCpxX5cNvo_KNH {\n margin-top: 35px;\n}\n\n.r3CTNJIqazOh7HmXypag {\n margin-left: 15px;\n margin-right: 15px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-form/EventConditionForm.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,gBAAgB;AACpB;;AAEA;IACI,iBAAiB;IACjB,kBAAkB;AACtB\",\"sourcesContent\":[\":local(.conditionTypesInfo) {\\n margin-top: 35px;\\n}\\n\\n:local(.hr) {\\n margin-left: 15px;\\n margin-right: 15px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"conditionTypesInfo\": `bK_1OgMCpxX5cNvo_KNH`,\n\t\"hr\": `r3CTNJIqazOh7HmXypag`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.xZzz7avfOImN5wyTQXue dl dl {\n padding-left: 10px;\n margin-bottom: 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-form/EventDefinitionSummary.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,kBAAkB;IAClB,kBAAkB;AACtB\",\"sourcesContent\":[\":local(.eventSummary) dl dl {\\n padding-left: 10px;\\n margin-bottom: 5px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"eventSummary\": `xZzz7avfOImN5wyTQXue`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.ZziANjUKFVuuqMSwLmtB {\n width: 150px;\n}\n\n.Xylx_0ZpoJHGYL_KE6gZ:not(:last-child)::after {\n content: ', ';\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-form/FieldsList.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,YAAY;AAChB;;AAEA;IACI,aAAa;AACjB\",\"sourcesContent\":[\":local(.actions) {\\n width: 150px;\\n}\\n\\n:local(.providerOptions):not(:last-child)::after {\\n content: ', ';\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"actions\": `ZziANjUKFVuuqMSwLmtB`,\n\t\"providerOptions\": `Xylx_0ZpoJHGYL_KE6gZ`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.NLt8T3UO0KICJTv1bzhC {\n float: right;\n margin-top: 10px;\n}\n\n.cWTw12YX10UuN5KAKoIX {\n margin-top: 35px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-form/NotificationsForm.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,YAAY;IACZ,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;AACpB\",\"sourcesContent\":[\":local(.manageNotifications) {\\n float: right;\\n margin-top: 10px;\\n}\\n\\n:local(.notificationSettings) {\\n margin-top: 35px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"manageNotifications\": `NLt8T3UO0KICJTv1bzhC`,\n\t\"notificationSettings\": `cWTw12YX10UuN5KAKoIX`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.m1bai3Kt45u9j3MtW7hT {\n margin-bottom: 20px;\n}\n\n.EJT6DlEKjyYuxyouwsaR {\n table-layout: fixed;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-form/field-value-providers/CommonFieldValueProviderSummary.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,mBAAmB;AACvB;;AAEA;IACI,mBAAmB;AACvB\",\"sourcesContent\":[\":local(.field) {\\n margin-bottom: 20px;\\n}\\n\\n:local(.fixedTable) {\\n table-layout: fixed;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"field\": `m1bai3Kt45u9j3MtW7hT`,\n\t\"fixedTable\": `EJT6DlEKjyYuxyouwsaR`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.DqBObyDjYFhBwILgUW_Q .panel-body {\n padding: 20px 10px;\n}\n\n.DqBObyDjYFhBwILgUW_Q ul {\n padding-left: 1em;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-form/field-value-providers/TemplateFieldValueProviderPreview.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,kBAAkB;AACtB;;AAEA;IACI,iBAAiB;AACrB\",\"sourcesContent\":[\":local(.templatePreview) .panel-body {\\n padding: 20px 10px;\\n}\\n\\n:local(.templatePreview) ul {\\n padding-left: 1em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"templatePreview\": `DqBObyDjYFhBwILgUW_Q`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport type { Sort } from 'stores/PaginationTypes';\n\nexport const SYSTEM_EVENT_DEFINITION_TYPE = 'system-notifications-v1';\n\nexport const ENTITY_TABLE_ID = 'event_definitions';\nexport const DEFAULT_LAYOUT = {\n pageSize: 20,\n sort: { attributeId: 'title', direction: 'asc' } as Sort,\n displayedColumns: ['title', 'description', 'priority', 'scheduling', 'status', 'matched_at'],\n columnsOrder: ['title', 'description', 'priority', 'matched_at', 'status', 'scheduling'],\n};\n\nexport const ADDITIONAL_ATTRIBUTES = [\n { id: 'scheduling', title: 'Scheduling', sortable: false },\n { id: 'matched_at', title: 'Last Matched', sortable: true },\n];\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\n\nimport * as URLUtils from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const AvailableEventDefinitionTypesActions = singletonActions(\n 'core.AvailableEventDefinitionTypes',\n () => Reflux.createActions({\n get: { asyncResult: true },\n }),\n);\n\nexport const AvailableEventDefinitionTypesStore = singletonStore(\n 'core.AvailableEventDefinitionTypes',\n () => Reflux.createStore({\n listenables: [AvailableEventDefinitionTypesActions],\n sourceUrl: '/events/entity_types',\n entityTypes: undefined,\n\n init() {\n this.get();\n },\n\n getInitialState() {\n return this.entityTypes;\n },\n\n get() {\n const promise = fetch('GET', URLUtils.qualifyUrl(this.sourceUrl));\n\n promise.then((response) => {\n this.entityTypes = response;\n this.trigger(this.entityTypes);\n });\n },\n }),\n);\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n\nimport { useMemo } from 'react';\n\nimport Store from 'logic/local-storage/Store';\nimport useQuery from 'routing/useQuery';\nimport type { ParameterJson } from 'views/logic/parameters/Parameter';\n\nexport type EventDefinitionLocalStorageConfig = {\n type,\n query?: string,\n streams?: Array,\n search_within_ms?: number,\n group_by?: Array,\n agg_function?: string,\n agg_field?: string,\n agg_value?: string | number,\n loc_query_parameters?: Array\n}\n\ntype EventDefinitionConfigFromUrl = {\n type: string,\n query: string,\n query_parameters: ParameterJson[],\n streams: string[],\n group_by?: string[],\n series?: Array<{ id: string, function: string, field: string }>,\n search_within_ms: number,\n conditions?: {\n expression: {left: any, right: any, expr: any},\n },\n}\n\nconst useEventDefinitionConfigFromLocalStorage = (): { hasLocalStorageConfig: boolean; configFromLocalStorage: EventDefinitionConfigFromUrl } => {\n const { 'session-id': sessionId } = useQuery();\n\n return useMemo(() => {\n const parsedLocalStorageConfig = Store.get(sessionId);\n if (!parsedLocalStorageConfig) return ({ hasLocalStorageConfig: false, configFromLocalStorage: undefined });\n Store.delete(sessionId);\n\n const {\n type,\n query,\n streams,\n search_within_ms,\n group_by,\n agg_function,\n agg_field,\n agg_value,\n loc_query_parameters,\n } = parsedLocalStorageConfig;\n\n const aggData = (agg_function && agg_value) ? {\n conditions: {\n expression: {\n expr: undefined,\n left: { expr: 'number-ref', ref: `${agg_function}-${agg_field}` },\n right: { expr: 'number', value: agg_value },\n },\n },\n series: [{ id: `${agg_function}-${agg_field}`, function: agg_function, field: agg_field }],\n group_by: group_by || [],\n } : {};\n\n return ({\n hasLocalStorageConfig: true,\n configFromLocalStorage: {\n type,\n query: query ?? '',\n streams: streams ?? [],\n search_within_ms,\n group_by: group_by ?? [],\n query_parameters: loc_query_parameters ?? [],\n ...aggData,\n },\n });\n }, [sessionId]);\n};\n\nexport default useEventDefinitionConfigFromLocalStorage;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport map from 'lodash/map';\nimport upperFirst from 'lodash/upperFirst';\nimport toNumber from 'lodash/toNumber';\nimport toString from 'lodash/toString';\n\nimport { Select } from 'components/common';\nimport { Col, ControlLabel, FormGroup, HelpBlock, Row, Input } from 'components/bootstrap';\nimport EventDefinitionPriorityEnum from 'logic/alerts/EventDefinitionPriorityEnum';\nimport * as FormsUtils from 'util/FormsUtils';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport useLocation from 'routing/useLocation';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nimport type { EventDefinition } from '../event-definitions-types';\nimport commonStyles from '../common/commonStyles.css';\n\nconst priorityOptions = map(EventDefinitionPriorityEnum.properties, (value, key) => ({ value: key, label: upperFirst(value.name) }));\n\ntype Props = {\n eventDefinition: EventDefinition,\n validation: {\n errors: {\n title?: string,\n }\n },\n onChange: (name: string, value: string | number) => void,\n}\n\nconst EventDetailsForm = ({ eventDefinition, validation, onChange }: Props) => {\n const { pathname } = useLocation();\n const sendTelemetry = useSendTelemetry();\n\n const handleChange = (event) => {\n const { name } = event.target;\n\n onChange(name, FormsUtils.getValueFromInput(event.target));\n };\n\n const handlePriorityChange = (nextPriority) => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_DETAILS.PRIORITY_CHANGED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: 'event-definition-details',\n app_action_value: 'priority-select',\n priority: priorityOptions[toNumber(nextPriority) - 1]?.label,\n });\n\n onChange('priority', toNumber(nextPriority));\n };\n\n const isSystemEventDefinition = eventDefinition.config.type === 'system-notifications-v1';\n\n return (\n \n \n Event Details
\n \n \n
\n );\n};\n\nEventDetailsForm.propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default EventDetailsForm;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./EventConditionForm.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./EventConditionForm.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport defaultTo from 'lodash/defaultTo';\nimport get from 'lodash/get';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Select } from 'components/common';\nimport { Clearfix, Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap';\nimport { HelpPanel } from 'components/event-definitions/common/HelpPanel';\nimport type User from 'logic/users/User';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport useLocation from 'routing/useLocation';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nimport styles from './EventConditionForm.css';\n\nimport type { EventDefinition } from '../event-definitions-types';\nimport commonStyles from '../common/commonStyles.css';\nimport { SYSTEM_EVENT_DEFINITION_TYPE } from '../constants';\n\ntype Props = {\n action: 'create' | 'edit',\n entityTypes: any,\n eventDefinition: EventDefinition,\n validation: {\n errors: {\n config?: unknown,\n title?: string,\n }\n },\n currentUser: User,\n onChange: (name: string, newConfig: EventDefinition['config']) => void,\n}\n\nconst EventConditionForm = ({ action, entityTypes, eventDefinition, validation, currentUser, onChange }: Props) => {\n const { pathname } = useLocation();\n const sendTelemetry = useSendTelemetry();\n\n const getConditionPlugin = (type): any => {\n if (type === undefined) {\n return {};\n }\n\n return PluginStore.exports('eventDefinitionTypes').find((eventDefinitionType) => eventDefinitionType.type === type) || {};\n };\n\n const sortedEventDefinitionTypes = (): any => (PluginStore.exports('eventDefinitionTypes') as any).sort((eventDefinitionType1, eventDefinitionType2) => {\n // Try to sort by given sort order and displayName if possible, otherwise do it by displayName\n const eventDefinitionType1Order = eventDefinitionType1.sortOrder;\n const eventDefinitionType2Order = eventDefinitionType2.sortOrder;\n\n if (eventDefinitionType1Order !== undefined || eventDefinitionType2Order !== undefined) {\n const sort = defaultTo(eventDefinitionType1Order, Number.MAX_SAFE_INTEGER) - defaultTo(eventDefinitionType2Order, Number.MAX_SAFE_INTEGER);\n\n if (sort !== 0) {\n return sort;\n }\n }\n\n return naturalSort(eventDefinitionType1.displayName, eventDefinitionType2.displayName);\n });\n\n const formattedEventDefinitionTypes = () => sortedEventDefinitionTypes()\n .map((type) => ({ label: type.displayName, value: type.type }));\n\n const handleEventDefinitionTypeChange = (nextType: string) => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_CONDITION.TYPE_SELECTED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: 'event-definition-condition',\n app_action_value: 'type-select',\n condition_type: nextType,\n });\n\n const conditionPlugin = getConditionPlugin(nextType);\n const defaultConfig = conditionPlugin?.defaultConfig || {} as EventDefinition['config'];\n\n onChange('config', { ...defaultConfig, type: nextType });\n };\n\n const renderConditionTypeDescriptions = () => {\n const typeDescriptions = sortedEventDefinitionTypes()\n .map((type) => (\n \n {type.displayName} \n {type.description || 'No description available.'} \n \n ));\n\n return {typeDescriptions}
;\n };\n\n const disabledSelect = () => !formattedEventDefinitionTypes().some((edt) => eventDefinition.config.type === edt.value) && action === 'edit';\n\n const eventDefinitionType = getConditionPlugin(eventDefinition.config.type);\n const isSystemEventDefinition = eventDefinition.config.type === SYSTEM_EVENT_DEFINITION_TYPE;\n\n const eventDefinitionTypeComponent = eventDefinitionType?.formComponent\n ? React.createElement>(eventDefinitionType.formComponent, {\n action: action,\n entityTypes: entityTypes,\n currentUser: currentUser,\n validation: validation,\n eventDefinition: eventDefinition,\n onChange: onChange,\n key: eventDefinition.id,\n })\n : null;\n\n return (\n \n \n Event Condition
\n\n {isSystemEventDefinition ? (\n \n The conditions of system notification event definitions cannot be edited.\n
\n ) : (\n <>\n \n Configure how Graylog should create Events of this kind. You can later use those Events as input on other\n Conditions, making it possible to build powerful Conditions based on others.\n
\n \n Condition Type \n \n \n {get(validation, 'errors.config[0]', 'Choose the type of Condition for this Event.')}\n \n \n >\n )}\n \n\n {!isSystemEventDefinition && !disabledSelect() && (\n <>\n \n \n {renderConditionTypeDescriptions()}\n \n \n \n\n {eventDefinitionTypeComponent && (\n <>\n
\n \n {eventDefinitionTypeComponent}\n \n >\n )}\n >\n )}\n
\n );\n};\n\nEventConditionForm.defaultProps = {\n action: 'create',\n entityTypes: undefined,\n};\n\nEventConditionForm.propTypes = {\n action: PropTypes.oneOf(['create', 'edit']),\n entityTypes: PropTypes.object,\n eventDefinition: PropTypes.object.isRequired,\n currentUser: PropTypes.object.isRequired, // Prop is passed down to pluggable entities\n validation: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default EventConditionForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Popover } from 'components/bootstrap';\n\nconst EventKeyHelpPopover = (props) => {\n const { id, ...otherProps } = props;\n const title = 'More about Event Keys';\n\n return (\n \n \n Event Keys are Fields used to arrange Events into groups. A group is created for each unique Key, so\n Graylog will generate as many Events as unique Keys are found. Example:\n
\n \n No Event Keys: One Event for each Login failure message.
\n Event Key username
: One Event for each username with a Login failure message.\n
\n \n );\n};\n\nEventKeyHelpPopover.propTypes = {\n id: PropTypes.string.isRequired,\n};\n\nexport default EventKeyHelpPopover;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport get from 'lodash/get';\nimport isNumber from 'lodash/isNumber';\n\nimport {\n OverlayTrigger,\n Icon,\n Select,\n} from 'components/common';\nimport {\n Button,\n ButtonToolbar,\n Col,\n ControlLabel,\n FormControl,\n FormGroup,\n HelpBlock,\n InputGroup,\n Input,\n Row,\n} from 'components/bootstrap';\nimport EventKeyHelpPopover from 'components/event-definitions/common/EventKeyHelpPopover';\nimport * as FormsUtils from 'util/FormsUtils';\nimport withTelemetry from 'logic/telemetry/withTelemetry';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\nimport withLocation from 'routing/withLocation';\n\nimport commonStyles from '../common/commonStyles.css';\n\nconst requiredFields = [\n 'fieldName',\n 'config.providers[0].type',\n];\n\nconst getProviderPlugin = (type) => {\n if (type === undefined) {\n return {};\n }\n\n return PluginStore.exports('fieldValueProviders').find((edt) => edt.type === type) || {};\n};\n\nconst getConfigProviderType = (config, defaultValue) => get(config, 'providers[0].type', defaultValue);\n\nconst formatFieldValueProviders = () => PluginStore.exports('fieldValueProviders')\n .map((type) => ({ label: type.displayName, value: type.type }));\n\nclass FieldForm extends React.Component {\n static propTypes = {\n fieldName: PropTypes.string,\n config: PropTypes.object,\n currentUser: PropTypes.object.isRequired,\n keys: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n sendTelemetry: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n };\n\n static defaultProps = {\n fieldName: '',\n config: {},\n };\n\n constructor(props) {\n super(props);\n const keyIndex = props.keys.indexOf(props.fieldName);\n\n this.state = {\n fieldName: props.fieldName,\n config: { data_type: 'string', providers: [], ...props.config },\n isKey: keyIndex >= 0,\n keyPosition: keyIndex >= 0 ? keyIndex + 1 : props.keys.length + 1,\n validation: { errors: {} },\n };\n }\n\n validate = () => {\n const { isKey, keyPosition, config } = this.state;\n const errors = {};\n\n const providerType = getConfigProviderType(config);\n let pluginRequiredFields = [];\n\n if (providerType) {\n const providerPlugin = getProviderPlugin(providerType);\n\n pluginRequiredFields = providerPlugin.requiredFields;\n }\n\n requiredFields.forEach((requiredField) => {\n if (!get(this.state, requiredField)) {\n errors[requiredField] = 'Field cannot be empty.';\n }\n });\n\n if (isKey && (!isNumber(keyPosition) || Number(keyPosition) < 1)) {\n errors.key_position = 'Field must be a positive number.';\n }\n\n pluginRequiredFields.forEach((requiredField) => {\n if (!get(config, `providers[0].${requiredField}`)) {\n errors[requiredField] = 'Field cannot be empty.';\n }\n });\n\n const errorNumber = Object.keys(errors).length;\n\n if (errorNumber > 0) {\n this.setState({ validation: { errors: errors } });\n }\n\n return errorNumber === 0;\n };\n\n handleSubmit = () => {\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_FIELDS.DONE_CLICKED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-fields',\n app_action_value: 'done-button',\n });\n\n if (this.validate()) {\n const { fieldName: prevFieldName, onChange } = this.props;\n const { fieldName, config, isKey, keyPosition } = this.state;\n\n onChange(prevFieldName, fieldName, config, isKey, keyPosition - 1);\n }\n };\n\n handleCancel = () => {\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_FIELDS.CANCEL_CLICKED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-fields',\n app_action_value: 'cancel-button',\n });\n\n this.props.onCancel();\n };\n\n handleFieldNameChange = (event) => {\n const nextFieldName = FormsUtils.getValueFromInput(event.target);\n\n this.setState({ fieldName: nextFieldName });\n };\n\n handleConfigChange = (nextConfig) => {\n this.setState({ config: nextConfig });\n };\n\n handleProviderTypeChange = (nextProvider) => {\n this.props.sendTelemetry(\n (nextProvider === 'lookup-v1')\n ? TELEMETRY_EVENT_TYPE.EVENTDEFINITION_FIELDS.SET_VALUE_FROM_LOOKUP_TABLE_SELECTED\n : TELEMETRY_EVENT_TYPE.EVENTDEFINITION_FIELDS.SET_VALUE_FROM_TEMPLATE_SELECTED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-fields',\n app_action_value: 'set-value-from-select',\n value_source: nextProvider,\n });\n\n const { config } = this.state;\n const providerPlugin = getProviderPlugin(nextProvider);\n const defaultProviderConfig = providerPlugin.defaultConfig || {};\n const nextConfig = {\n ...config,\n providers: [{\n ...defaultProviderConfig,\n type: nextProvider,\n }],\n };\n\n this.handleConfigChange(nextConfig);\n };\n\n handleKeySortChange = (event) => {\n const nextPosition = event.target.value === '' ? '' : FormsUtils.getValueFromInput(event.target);\n\n this.setState({ keyPosition: nextPosition });\n };\n\n toggleKey = (event) => {\n const checked = FormsUtils.getValueFromInput(event.target);\n\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_FIELDS.AS_EVENT_KEY_TOGGLED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-fields',\n app_action_value: 'event-key-checkbox',\n event_key_checked: checked,\n });\n\n this.setState({ isKey: checked });\n };\n\n renderFieldValueProviderForm = () => {\n const { fieldName, config, validation } = this.state;\n const { currentUser } = this.props;\n\n const providerType = getConfigProviderType(config);\n\n if (!providerType) {\n return null;\n }\n\n const providerPlugin = getProviderPlugin(providerType);\n\n return (providerPlugin.formComponent\n ? React.createElement(providerPlugin.formComponent, {\n fieldName: fieldName,\n config: config,\n onChange: this.handleConfigChange,\n validation: validation,\n currentUser: currentUser,\n })\n : Selected provider is not available.\n );\n };\n\n render() {\n const { fieldName: prevFieldName } = this.props;\n const { fieldName, isKey, keyPosition, config, validation } = this.state;\n\n return (\n \n \n \n {prevFieldName ? `Custom Field \"${fieldName}\"` : 'New Custom Field'}\n
\n\n \n\n \n \n Use Field as Event Key \n }>\n \n \n \n \n \n \n \n \n \n \n {validation.errors.key_position || 'Indicates if this Field should be a Key and its order.'}\n \n \n\n \n Field Data Type \n String \n \n\n \n Set Value From \n \n \n {validation.errors['config.providers[0].type'] || 'Select a source for the value of this Field.'}\n \n \n \n\n \n {this.renderFieldValueProviderForm()}\n \n\n \n \n \n \n \n \n
\n );\n }\n}\n\nexport default withLocation(withTelemetry(FieldForm));\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./FieldsList.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./FieldsList.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { ButtonToolbar, Button } from 'components/bootstrap';\nimport { DataTable } from 'components/common';\nimport withTelemetry from 'logic/telemetry/withTelemetry';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\nimport withLocation from 'routing/withLocation';\n\nimport styles from './FieldsList.css';\n\nconst HEADERS = ['Field Name', 'Is Key?', 'Value Source', 'Data Type', 'Configuration', 'Actions'];\n\nconst getFieldValueProviderPlugin = (type) => {\n if (type === undefined) {\n return {};\n }\n\n return PluginStore.exports('fieldValueProviders').find((p) => p.type === type) || {};\n};\n\nconst providerFormatter = (config) => {\n const configKeys = Object.keys(config).filter((key) => key !== 'type');\n\n return (\n \n {configKeys.map((key) => (\n {key}: {JSON.stringify(config[key])}\n ))}\n
\n );\n};\n\nclass FieldsList extends React.Component {\n static propTypes = {\n fields: PropTypes.object.isRequired,\n keys: PropTypes.array.isRequired,\n onAddFieldClick: PropTypes.func.isRequired,\n onEditFieldClick: PropTypes.func.isRequired,\n onRemoveFieldClick: PropTypes.func.isRequired,\n sendTelemetry: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n };\n\n handleAddFieldClick = () => {\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_FIELDS.ADD_CUSTOM_FIELD_CLICKED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-fields',\n app_action_value: 'add-custom-field-button',\n });\n\n const { onAddFieldClick } = this.props;\n\n onAddFieldClick();\n };\n\n handleEditClick = (fieldName) => () => {\n const { onEditFieldClick } = this.props;\n\n onEditFieldClick(fieldName);\n };\n\n handleRemoveClick = (fieldName) => () => {\n const { onRemoveFieldClick } = this.props;\n\n onRemoveFieldClick(fieldName);\n };\n\n fieldFormatter = (fieldName) => {\n const { fields, keys } = this.props;\n const config = fields[fieldName];\n\n const keyIndex = keys.indexOf(fieldName);\n const fieldProviderPlugin = getFieldValueProviderPlugin(config.providers[0].type);\n\n return (\n \n {fieldName} \n {keyIndex < 0 ? 'No' : 'Yes'} \n {fieldProviderPlugin.displayName || config.providers[0].type} \n {config.data_type} \n {providerFormatter(config.providers[0])} \n \n \n \n \n \n \n \n );\n };\n\n render() {\n const { fields } = this.props;\n\n const fieldNames = Object.keys(fields).sort(naturalSort);\n const addCustomFieldButton = (\n \n );\n\n if (fieldNames.length === 0) {\n return (\n <>\n \n This Event does not have any custom Fields yet.\n
\n {addCustomFieldButton}\n >\n );\n }\n\n return (\n <>\n \n {addCustomFieldButton}\n >\n );\n }\n}\n\nexport default withLocation(withTelemetry(FieldsList));\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./TemplateFieldValueProviderPreview.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./TemplateFieldValueProviderPreview.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nimport { Panel } from 'components/bootstrap';\n\nimport styles from './TemplateFieldValueProviderPreview.css';\n\nclass TemplateFieldValueProviderPreview extends React.Component {\n static propTypes = {};\n\n render() {\n return (\n Available Fields in Template}>\n \n Graylog lets you enrich generated Events with dynamic values. You can access Fields from the Event context{' '}\n {/* eslint-disable-next-line no-template-curly-in-string */}\n with {'${source.}'}
.\n
\n Available Fields in the Template depend on the condition that created the Event:\n
\n \n - Filter: All Fields in the original log message
\n - Aggregation: Fields set in Group By with their original names
\n - Correlation: All Fields in the last matched and non-negated Event
\n
\n \n );\n }\n}\n\nexport default TemplateFieldValueProviderPreview;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { ExternalLink } from 'components/common';\nimport { Checkbox, Col, FormGroup, HelpBlock, Row, Input } from 'components/bootstrap';\nimport * as FormsUtils from 'util/FormsUtils';\n\nimport TemplateFieldValueProviderPreview from './TemplateFieldValueProviderPreview';\n\nclass TemplateFieldValueProviderForm extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n static type = 'template-v1';\n\n static defaultConfig = {\n template: '',\n };\n\n static requiredFields = [\n 'template',\n ];\n\n handleChange = (event) => {\n const { config, onChange } = this.props;\n const { name } = event.target;\n const value = FormsUtils.getValueFromInput(event.target);\n const nextProviders = cloneDeep(config.providers);\n const templateProvider = nextProviders.find((provider) => provider.type === TemplateFieldValueProviderForm.type);\n\n templateProvider[name] = value;\n onChange({ ...config, providers: nextProviders });\n };\n\n render() {\n const { config, validation } = this.props;\n const provider = config.providers.find((p) => p.type === TemplateFieldValueProviderForm.type);\n\n const helpText = (\n \n Type a literal text to set to this Field or use{' '}\n \n JMTE syntax\n \n {' '}to add a dynamic Value.\n \n );\n\n return (\n \n \n \n\n \n \n Require all template values to be set\n \n Check this option to validate that all variables used in the Template have values. \n \n \n \n \n \n
\n );\n }\n}\n\nexport default TemplateFieldValueProviderForm;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./CommonFieldValueProviderSummary.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./CommonFieldValueProviderSummary.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Table, Button } from 'components/bootstrap';\nimport { Icon } from 'components/common';\n\nimport styles from './CommonFieldValueProviderSummary.css';\n\nclass CommonFieldValueProviderSummary extends React.Component {\n static propTypes = {\n fieldName: PropTypes.string.isRequired,\n config: PropTypes.object.isRequired,\n keys: PropTypes.array.isRequired,\n children: PropTypes.element.isRequired,\n };\n\n state = {\n displayDetails: false,\n };\n\n toggleDisplayDetails = () => {\n const { displayDetails } = this.state;\n\n this.setState({ displayDetails: !displayDetails });\n };\n\n render() {\n const { fieldName, config, keys, children } = this.props;\n const { displayDetails } = this.state;\n\n return (\n \n - {fieldName}
\n - \n \n {displayDetails && (\n
\n \n \n Is Key? \n {keys.includes(fieldName) ? 'Yes' : 'No'} \n \n \n Data Type \n {config.data_type} \n \n {children}\n \n
\n )}\n \n
\n );\n }\n}\n\nexport default CommonFieldValueProviderSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport CommonFieldValueProviderSummary from './CommonFieldValueProviderSummary';\n\nclass TemplateFieldValueProviderSummary extends React.Component {\n static propTypes = {\n fieldName: PropTypes.string.isRequired,\n config: PropTypes.object.isRequired,\n keys: PropTypes.array.isRequired,\n };\n\n render() {\n const { config } = this.props;\n\n return (\n \n <>\n \n Value source \n Template \n \n \n Template \n {config.providers[0].template} \n \n \n Validate that all Template values are set \n {config.providers[0].require_values ? 'Yes' : 'No'} \n \n >\n \n );\n }\n}\n\nexport default TemplateFieldValueProviderSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport memoize from 'lodash/memoize';\n\nimport { Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap';\nimport { Select } from 'components/common';\nimport * as FormsUtils from 'util/FormsUtils';\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\n\nclass LookupTableFieldValueProviderForm extends React.Component {\n static propTypes = {\n allFieldTypes: PropTypes.array.isRequired,\n config: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n lookupTables: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n static type = 'lookup-v1';\n\n static defaultConfig = {\n table_name: '',\n key_field: '',\n };\n\n static requiredFields = [\n 'table_name',\n 'key_field',\n ];\n\n formatMessageFields = memoize(\n (fieldTypes) => fieldTypes\n .sort((ftA, ftB) => naturalSortIgnoreCase(ftA.name, ftB.name))\n .map((fieldType) => ({\n label: `${fieldType.name} – ${fieldType.value.type.type}`,\n value: fieldType.name,\n })),\n (fieldTypes) => fieldTypes.map((ft) => ft.name).join('-'),\n );\n\n propagateChanges = (key, value) => {\n const { config, onChange } = this.props;\n const nextProviders = cloneDeep(config.providers);\n const lookupProvider = nextProviders.find((provider) => provider.type === LookupTableFieldValueProviderForm.type);\n\n lookupProvider[key] = value;\n onChange({ ...config, providers: nextProviders });\n };\n\n handleChange = (event) => {\n const { name } = event.target;\n const value = FormsUtils.getValueFromInput(event.target);\n\n this.propagateChanges(name, value);\n };\n\n handleSelectChange = (key) => (nextLookupTable) => {\n this.propagateChanges(key, nextLookupTable);\n };\n\n formatLookupTables = (lookupTables) => lookupTables\n .sort((lt1, lt2) => naturalSortIgnoreCase(lt1.title, lt2.title))\n .map((table) => ({ label: table.title, value: table.name }));\n\n render() {\n const { allFieldTypes, config, lookupTables, validation } = this.props;\n const provider = config.providers.find((p) => p.type === LookupTableFieldValueProviderForm.type);\n\n return (\n \n \n \n Select Lookup Table \n \n \n {validation.errors.table_name || 'Select the Lookup Table Graylog should use to get the value.'}\n \n \n\n \n Lookup Table Key Field \n \n \n {validation.errors.key_field || 'Message Field name whose value will be used as Lookup Table Key.'}\n \n \n \n
\n );\n }\n}\n\nexport default LookupTableFieldValueProviderForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Col, Row } from 'components/bootstrap';\nimport { Spinner } from 'components/common';\nimport { useStore } from 'stores/connect';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport { LookupTablesActions, LookupTablesStore } from 'stores/lookup-tables/LookupTablesStore';\nimport useFieldTypes from 'views/logic/fieldtypes/useFieldTypes';\nimport { ALL_MESSAGES_TIMERANGE } from 'views/Constants';\n\nimport LookupTableFieldValueProviderForm from './LookupTableFieldValueProviderForm';\n\nconst LOOKUP_PERMISSIONS = [\n 'lookuptables:read',\n];\n\ntype Props = {\n config: {},\n validation: {},\n currentUser: {\n permissions: Array,\n },\n onChange: () => void,\n}\n\nconst LookupTableFieldValueProviderFormContainer = ({ currentUser, ...otherProps }: Props) => {\n const { data: fieldTypes } = useFieldTypes([], ALL_MESSAGES_TIMERANGE);\n const lookupTables = useStore(LookupTablesStore);\n\n useEffect(() => {\n if (!isPermitted(currentUser.permissions, LOOKUP_PERMISSIONS)) {\n return;\n }\n\n LookupTablesActions.searchPaginated(1, 0, undefined, false);\n }, [currentUser.permissions]);\n\n if (!isPermitted(currentUser.permissions, LOOKUP_PERMISSIONS)) {\n return (\n \n \n No Lookup Tables found.
\n \n
\n );\n }\n\n const isLoading = !fieldTypes || !lookupTables.tables;\n\n if (isLoading) {\n return ;\n }\n\n return (\n \n );\n};\n\nLookupTableFieldValueProviderFormContainer.propTypes = {\n config: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n currentUser: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default LookupTableFieldValueProviderFormContainer;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { IfPermitted } from 'components/common';\n\nimport CommonFieldValueProviderSummary from './CommonFieldValueProviderSummary';\n\nclass LookupTableFieldValueProviderSummary extends React.Component {\n static propTypes = {\n fieldName: PropTypes.string.isRequired,\n config: PropTypes.object.isRequired,\n keys: PropTypes.array.isRequired,\n };\n\n render() {\n const { config } = this.props;\n const provider = config.providers[0];\n\n return (\n \n \n <>\n \n Value source \n Lookup Table \n \n \n Lookup Table \n {provider.table_name} \n \n \n Lookup Table Key Field \n {provider.key_field} \n \n >\n \n \n );\n }\n}\n\nexport default LookupTableFieldValueProviderSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\n\nimport TemplateFieldValueProviderForm from './TemplateFieldValueProviderForm';\nimport TemplateFieldValueProviderSummary from './TemplateFieldValueProviderSummary';\nimport LookupTableFieldValueProviderForm from './LookupTableFieldValueProviderForm';\nimport LookupTableFieldValueProviderFormContainer from './LookupTableFieldValueProviderFormContainer';\nimport LookupTableFieldValueProviderSummary from './LookupTableFieldValueProviderSummary';\n\nPluginStore.register(new PluginManifest({}, {\n fieldValueProviders: [\n {\n type: TemplateFieldValueProviderForm.type,\n displayName: 'Template',\n formComponent: TemplateFieldValueProviderForm,\n summaryComponent: TemplateFieldValueProviderSummary,\n defaultConfig: TemplateFieldValueProviderForm.defaultConfig,\n requiredFields: TemplateFieldValueProviderForm.requiredFields,\n },\n {\n type: LookupTableFieldValueProviderForm.type,\n displayName: 'Lookup Table',\n formComponent: LookupTableFieldValueProviderFormContainer,\n summaryComponent: LookupTableFieldValueProviderSummary,\n defaultConfig: LookupTableFieldValueProviderForm.defaultConfig,\n requiredFields: LookupTableFieldValueProviderForm.requiredFields,\n },\n ],\n}));\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport omit from 'lodash/omit';\n\nimport { OverlayTrigger, Icon } from 'components/common';\nimport { Alert, Col, Row, Button } from 'components/bootstrap';\nimport EventKeyHelpPopover from 'components/event-definitions/common/EventKeyHelpPopover';\nimport type User from 'logic/users/User';\n\nimport FieldForm from './FieldForm';\nimport FieldsList from './FieldsList';\n\n// Import built-in Field Value Providers\nimport './field-value-providers';\n\nimport type { EventDefinition } from '../event-definitions-types';\nimport commonStyles from '../common/commonStyles.css';\n\ntype Props = {\n currentUser: User,\n eventDefinition: EventDefinition,\n validation: {\n errors: {\n title?: string,\n }\n },\n onChange: (name: string, value: unknown) => void,\n}\n\nconst FieldsForm = ({ currentUser, eventDefinition, validation, onChange }: Props) => {\n const [editField, setEditField] = useState(undefined);\n const [showFieldForm, setShowFieldForm] = useState(false);\n\n const removeCustomField = (fieldName) => {\n const nextFieldSpec = omit(eventDefinition.field_spec, fieldName);\n\n onChange('field_spec', nextFieldSpec);\n\n // Filter out all non-existing field names from key_spec\n const fieldNames = Object.keys(nextFieldSpec);\n const nextKeySpec = eventDefinition.key_spec.filter((key) => fieldNames.includes(key));\n\n onChange('key_spec', nextKeySpec);\n };\n\n const toggleFieldForm = (fieldName?: string) => {\n setEditField(showFieldForm ? undefined : fieldName);\n setShowFieldForm(!showFieldForm);\n };\n\n const addCustomField = (prevFieldName, fieldName, config, isKey, keyPosition) => {\n const nextFieldSpec = (prevFieldName === fieldName\n ? cloneDeep(eventDefinition.field_spec)\n : omit(eventDefinition.field_spec, prevFieldName));\n\n nextFieldSpec[fieldName] = config;\n onChange('field_spec', nextFieldSpec);\n\n // Filter out all non-existing field names from key_spec and the current field name\n const fieldNames = Object.keys(nextFieldSpec);\n let nextKeySpec = eventDefinition.key_spec.filter((key) => fieldNames.includes(key) && key !== fieldName);\n\n if (isKey) {\n // Add key to its new position\n nextKeySpec = [...nextKeySpec.slice(0, keyPosition), fieldName, ...nextKeySpec.slice(keyPosition)];\n }\n\n onChange('key_spec', nextKeySpec);\n\n toggleFieldForm();\n };\n\n const isSystemEventDefinition = eventDefinition.config.type === 'system-notifications-v1';\n\n if (showFieldForm) {\n return (\n \n );\n }\n\n const fieldErrors = get(validation, 'errors.field_spec', []);\n const keyErrors = get(validation, 'errors.key_spec', []);\n const errors = [...fieldErrors, ...keyErrors];\n\n return (\n \n \n Event Fields (optional)
\n\n {isSystemEventDefinition ? (\n \n The event fields of system notification event definitions cannot be edited.\n
\n ) : (\n <>\n \n Include additional information in Events generated from this Event Definition by adding custom Fields. That\n can help you search Events or having more context when receiving Notifications.\n
\n\n {errors.length > 0 && (\n \n Please correct the following errors before saving this Event Definition:
\n \n {errors.map((error) => - {error}
)}\n
\n \n )}\n\n {Object.keys(eventDefinition.field_spec).length > 0 && (\n \n - \n Keys\n
}>\n \n \n \n - {eventDefinition.key_spec.length > 0 ? eventDefinition.key_spec.join(', ') : 'No Keys configured yet.'}
\n
\n )}\n \n >\n )}\n \n
\n );\n};\n\nFieldsForm.propTypes = {\n currentUser: PropTypes.object.isRequired,\n eventDefinition: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default FieldsForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Select } from 'components/common';\nimport { Button, ButtonToolbar, Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap';\nimport EventNotificationFormContainer\n from 'components/event-notifications/event-notification-form/EventNotificationFormContainer';\nimport withTelemetry from 'logic/telemetry/withTelemetry';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\nimport withLocation from 'routing/withLocation';\n\nimport commonStyles from '../common/commonStyles.css';\n\nclass AddNotificationForm extends React.Component {\n static propTypes = {\n notifications: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n hasCreationPermissions: PropTypes.bool,\n sendTelemetry: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n };\n\n static defaultProps = {\n hasCreationPermissions: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n selectedNotification: undefined,\n displayNewNotificationForm: false,\n };\n }\n\n handleNewNotificationSubmit = (promise) => {\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.DONE_CLICKED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-notifications',\n app_action_value: 'done-button',\n });\n\n const { onChange } = this.props;\n\n promise.then((notification) => onChange(notification.id));\n };\n\n handleSubmit = () => {\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.DONE_CLICKED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-notifications',\n app_action_value: 'done-button',\n });\n\n const { onChange } = this.props;\n const { selectedNotification } = this.state;\n\n onChange(selectedNotification);\n };\n\n handleCancel = () => {\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.CANCEL_CLICKED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-notifications',\n app_action_value: 'cancel-button',\n });\n\n this.props.onCancel();\n };\n\n handleSelectNotificationChange = (nextNotificationId) => {\n if (nextNotificationId === 'create') {\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.CREATE_NEW_CLICKED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-notifications',\n app_action_value: 'create-new-option',\n });\n\n this.setState({ displayNewNotificationForm: true });\n\n return;\n }\n\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.NOTIFICATION_SELECTED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-notifications',\n app_action_value: 'existing-notification-option',\n });\n\n this.setState({ selectedNotification: nextNotificationId, displayNewNotificationForm: false });\n };\n\n formatNotifications = (notifications) => {\n const { hasCreationPermissions } = this.props;\n const formattedNotifications = notifications.map((n) => ({ label: n.title, value: n.id }));\n\n if (hasCreationPermissions) {\n formattedNotifications.unshift({\n label: 'Create New Notification...',\n value: 'create',\n });\n }\n\n return formattedNotifications;\n };\n\n render() {\n const { notifications } = this.props;\n const { displayNewNotificationForm, selectedNotification } = this.state;\n const doneButton = displayNewNotificationForm\n ? \n : ;\n\n return (\n \n \n Add Notification
\n\n \n\n \n {doneButton}\n \n \n \n
\n );\n }\n}\n\nexport default withLocation(withTelemetry(AddNotificationForm));\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport camelCase from 'lodash/camelCase';\nimport cloneDeep from 'lodash/cloneDeep';\nimport defaultTo from 'lodash/defaultTo';\nimport max from 'lodash/max';\nimport moment from 'moment';\nimport styled, { css } from 'styled-components';\n\nimport { ControlLabel, FormControl, FormGroup, InputGroup } from 'components/bootstrap';\nimport { TimeUnitInput } from 'components/common';\nimport { extractDurationAndUnit } from 'components/common/TimeUnitInput';\nimport * as FormsUtils from 'util/FormsUtils';\n\nconst TIME_UNITS = ['HOURS', 'MINUTES', 'SECONDS'];\n\nconst Container = styled.div(({ theme }) => css`\n padding-top: ${theme.spacings.lg};\n`);\n\nclass NotificationSettingsForm extends React.Component {\n constructor(props) {\n super(props);\n\n const { backlog_size: backlogSize, grace_period_ms: gracePeriodMs } = props.eventDefinition.notification_settings;\n\n const gracePeriod = extractDurationAndUnit(gracePeriodMs, TIME_UNITS);\n const defaultBacklogSize = props.defaults.default_backlog_size;\n const effectiveBacklogSize = defaultTo(backlogSize, defaultBacklogSize);\n\n this.state = {\n gracePeriodDuration: gracePeriod.duration,\n gracePeriodUnit: gracePeriod.unit,\n isBacklogSizeEnabled: (backlogSize === null ? false : (effectiveBacklogSize > 0)),\n backlogSize: effectiveBacklogSize,\n };\n }\n\n propagateChanges = (key, value) => {\n const { eventDefinition, onSettingsChange } = this.props;\n const nextNotificationSettings = cloneDeep(eventDefinition.notification_settings);\n\n nextNotificationSettings[key] = value;\n onSettingsChange('notification_settings', nextNotificationSettings);\n };\n\n handleGracePeriodChange = (nextValue, nextUnit, enabled) => {\n const durationInMs = enabled ? moment.duration(max([nextValue, 0]), nextUnit).asMilliseconds() : 0;\n\n this.propagateChanges('grace_period_ms', durationInMs);\n this.setState({ gracePeriodDuration: nextValue, gracePeriodUnit: nextUnit });\n };\n\n handleBacklogSizeChange = (event) => {\n const { name } = event.target;\n const value = event.target.value === '' ? '' : FormsUtils.getValueFromInput(event.target);\n\n this.setState({ [camelCase(name)]: value });\n this.propagateChanges(name, max([Number(value), 0]));\n };\n\n toggleBacklogSize = () => {\n const { isBacklogSizeEnabled, backlogSize } = this.state;\n\n this.setState({ isBacklogSizeEnabled: !isBacklogSizeEnabled });\n this.propagateChanges('backlog_size', (isBacklogSizeEnabled ? 0 : backlogSize));\n };\n\n render() {\n const { eventDefinition } = this.props;\n const { gracePeriodDuration, gracePeriodUnit, isBacklogSizeEnabled, backlogSize } = this.state;\n\n if (eventDefinition.notifications.length === 0) {\n return null;\n }\n\n return (\n \n \n \n \n Graylog sends Notifications for Alerts every time they occur. Set a Grace Period to control how long\n Graylog should wait before sending Notifications again. Note that Events with keys will have a Grace\n Period for each different key value.\n
\n \n\n \n Message Backlog \n \n \n \n \n \n \n Number of messages to be included in Notifications.
\n \n \n );\n }\n}\n\nNotificationSettingsForm.propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n defaults: PropTypes.object.isRequired,\n onSettingsChange: PropTypes.func.isRequired,\n};\n\nexport default NotificationSettingsForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { Button } from 'components/bootstrap';\nimport { DataTable } from 'components/common';\n\nclass NotificationList extends React.Component {\n static propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n notifications: PropTypes.array.isRequired,\n onAddNotificationClick: PropTypes.func.isRequired,\n onRemoveNotificationClick: PropTypes.func.isRequired,\n };\n\n getNotificationPlugin = (type) => {\n if (type === undefined) {\n return {};\n }\n\n return PluginStore.exports('eventNotificationTypes').find((n) => n.type === type) || {};\n };\n\n handleRemoveClick = (notificationId) => () => {\n const { onRemoveNotificationClick } = this.props;\n\n onRemoveNotificationClick(notificationId);\n };\n\n notificationFormatter = (notification) => {\n // Guard in case it is a new Notification or the Notification was deleted\n if (notification.missing) {\n return (\n \n Could not find information for Notification {notification.title} \n \n \n \n \n );\n }\n\n const plugin = this.getNotificationPlugin(notification.config.type);\n\n return (\n \n {notification.title} \n {plugin.displayName || notification.config.type} \n \n \n \n \n );\n };\n\n render() {\n const { eventDefinition, notifications, onAddNotificationClick } = this.props;\n\n const definitionNotifications = eventDefinition.notifications\n .map((edn) => notifications.find((n) => n.id === edn.notification_id) || {\n title: edn.notification_id,\n missing: true,\n });\n const addNotificationButton = (\n \n );\n\n if (definitionNotifications.length === 0) {\n return (\n <>\n \n This Event is not configured to trigger any Notifications yet.\n
\n {addNotificationButton}\n >\n );\n }\n\n return (\n <>\n \n {addNotificationButton}\n >\n );\n }\n}\n\nexport default NotificationList;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./NotificationsForm.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./NotificationsForm.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport without from 'lodash/without';\n\nimport { LinkContainer } from 'components/common/router';\nimport { Alert, Col, Row, Button } from 'components/bootstrap';\nimport { Icon } from 'components/common';\nimport Routes from 'routing/Routes';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport withTelemetry from 'logic/telemetry/withTelemetry';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\nimport withLocation from 'routing/withLocation';\n\nimport AddNotificationForm from './AddNotificationForm';\nimport NotificationSettingsForm from './NotificationSettingsForm';\nimport NotificationList from './NotificationList';\nimport styles from './NotificationsForm.css';\n\nimport commonStyles from '../common/commonStyles.css';\n\nclass NotificationsForm extends React.Component {\n constructor() {\n super();\n\n this.state = {\n showAddNotificationForm: false,\n };\n }\n\n toggleAddNotificationForm = () => {\n this.props.sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.ADD_CLICKED, {\n app_pathname: getPathnameWithoutId(this.props.location.pathname),\n app_section: 'event-definition-notifications',\n app_action_value: 'add-notification-button',\n });\n\n const { showAddNotificationForm } = this.state;\n\n this.setState({ showAddNotificationForm: !showAddNotificationForm });\n };\n\n handleAssignNotification = (nextNotification) => {\n const { onChange, eventDefinition } = this.props;\n const nextNotifications = cloneDeep(eventDefinition.notifications);\n\n nextNotifications.push({\n notification_id: nextNotification,\n });\n\n onChange('notifications', nextNotifications);\n this.toggleAddNotificationForm();\n };\n\n handleRemoveNotification = (notificationId) => {\n const { onChange, eventDefinition } = this.props;\n const notification = eventDefinition.notifications.find((n) => n.notification_id === notificationId);\n const nextNotifications = without(eventDefinition.notifications, notification);\n\n onChange('notifications', nextNotifications);\n };\n\n render() {\n const { eventDefinition, notifications, defaults, currentUser, onChange } = this.props;\n const { showAddNotificationForm } = this.state;\n\n const notificationIds = eventDefinition.notifications.map((n) => n.notification_id);\n const missingPermissions = notificationIds.filter((id) => !isPermitted(currentUser.permissions, `eventnotifications:read:${id}`));\n\n if (missingPermissions.length > 0) {\n return (\n \n \n \n Missing Notifications Permissions for:
{missingPermissions.join(', ')}\n \n \n
\n );\n }\n\n if (showAddNotificationForm) {\n return (\n \n );\n }\n\n return (\n \n \n \n \n \n \n \n Notifications (optional)
\n \n Is this Event important enough that requires your attention? Make it an Alert by adding Notifications to it.\n
\n\n \n \n \n
\n );\n }\n}\n\nNotificationsForm.propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n notifications: PropTypes.array.isRequired,\n defaults: PropTypes.object.isRequired,\n currentUser: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n sendTelemetry: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n};\n\nexport default withLocation(withTelemetry(NotificationsForm));\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport type { SyntheticEvent } from 'react';\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport last from 'lodash/last';\nimport defaultTo from 'lodash/defaultTo';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport styled from 'styled-components';\nimport URI from 'urijs';\nimport QS from 'qs';\n\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport { Button, Col, Row } from 'components/bootstrap';\nimport { ModalSubmit, Wizard } from 'components/common';\nimport type { EventNotification } from 'stores/event-notifications/EventNotificationsStore';\nimport type { EventDefinition } from 'components/event-definitions/event-definitions-types';\nimport type User from 'logic/users/User';\nimport useQuery from 'routing/useQuery';\nimport useHistory from 'routing/useHistory';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport useLocation from 'routing/useLocation';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nimport EventDetailsForm from './EventDetailsForm';\nimport EventConditionForm from './EventConditionForm';\nimport FieldsForm from './FieldsForm';\nimport NotificationsForm from './NotificationsForm';\nimport EventDefinitionSummary from './EventDefinitionSummary';\n\nconst STEP_KEYS = ['event-details', 'condition', 'fields', 'notifications', 'summary'];\nconst STEP_TELEMETRY_KEYS = [\n TELEMETRY_EVENT_TYPE.EVENTDEFINITION_DETAILS.STEP_CLICKED,\n TELEMETRY_EVENT_TYPE.EVENTDEFINITION_CONDITION.STEP_CLICKED,\n TELEMETRY_EVENT_TYPE.EVENTDEFINITION_FIELDS.STEP_CLICKED,\n TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.STEP_CLICKED,\n TELEMETRY_EVENT_TYPE.EVENTDEFINITION_SUMMARY.STEP_CLICKED,\n];\n\nconst getConditionPlugin = (type: string | undefined) => {\n if (type === undefined) {\n return { displayName: null };\n }\n\n return PluginStore.exports('eventDefinitionTypes').find((edt) => edt.type === type) || {};\n};\n\nconst WizardContainer = styled.div`\n margin-bottom: 10px;\n`;\n\ntype Props = {\n action: 'edit' | 'create',\n eventDefinition: EventDefinition,\n currentUser: User,\n validation: {\n errors: {\n config?: unknown,\n title?: string,\n }\n },\n entityTypes: {},\n notifications: Array,\n defaults: { default_backlog_size: number },\n onChange: (key: string, value: unknown) => void,\n onCancel: () => void,\n onSubmit: () => void\n}\n\nconst EventDefinitionForm = ({\n action,\n eventDefinition,\n currentUser,\n validation,\n entityTypes,\n notifications,\n defaults,\n onChange,\n onCancel,\n onSubmit,\n}: Props) => {\n const { step } = useQuery();\n const [activeStep, setActiveStep] = useState(step as string || STEP_KEYS[0]);\n const history = useHistory();\n const { pathname } = useLocation();\n const sendTelemetry = useSendTelemetry();\n\n useEffect(() => {\n const currentUrl = new URI(window.location.href);\n const queryParameters = QS.parse(currentUrl.query());\n\n if (queryParameters.step !== activeStep) {\n const newUrl = currentUrl.removeSearch('step').addQuery('step', activeStep);\n history.replace(newUrl.resource());\n }\n }, [activeStep, history]);\n\n const handleSubmit = (event: SyntheticEvent) => {\n if (event) {\n event.preventDefault();\n }\n\n if (activeStep === last(STEP_KEYS)) {\n onSubmit();\n }\n };\n\n const defaultStepProps = {\n key: eventDefinition.id, // Recreate components if ID changed\n action,\n entityTypes,\n eventDefinition,\n onChange,\n validation,\n currentUser,\n };\n\n const eventDefinitionType = getConditionPlugin(eventDefinition.config.type);\n\n const steps = [\n {\n key: STEP_KEYS[0],\n title: 'Event Details',\n component: ,\n },\n {\n key: STEP_KEYS[1],\n title: defaultTo(eventDefinitionType.displayName, 'Condition'),\n component: ,\n },\n {\n key: STEP_KEYS[2],\n title: 'Fields',\n component: ,\n },\n {\n key: STEP_KEYS[3],\n title: 'Notifications',\n component: ,\n },\n {\n key: STEP_KEYS[4],\n title: 'Summary',\n component: (\n \n ),\n },\n ];\n\n const handleStepChange = (nextStep) => {\n sendTelemetry(STEP_TELEMETRY_KEYS[STEP_KEYS.indexOf(nextStep)], {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: (action === 'create') ? 'new-event-definition' : 'edit-event-definition',\n app_action_value: 'event-definition-step',\n current_step: steps[STEP_KEYS.indexOf(activeStep)].title,\n });\n\n setActiveStep(nextStep);\n };\n\n const renderButtons = () => {\n if (activeStep === last(STEP_KEYS)) {\n return (\n \n );\n }\n\n const activeStepIndex = STEP_KEYS.indexOf(activeStep);\n\n const handlePreviousClick = () => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_PREVIOUS_CLICKED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: (action === 'create') ? 'new-event-definition' : 'edit-event-definition',\n app_action_value: 'previous-button',\n current_step: steps[activeStepIndex].title,\n });\n\n const previousStep = activeStepIndex > 0 ? STEP_KEYS[activeStepIndex - 1] : undefined;\n setActiveStep(previousStep);\n };\n\n const handleNextClick = () => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NEXT_CLICKED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: (action === 'create') ? 'new-event-definition' : 'edit-event-definition',\n app_action_value: 'next-button',\n current_step: steps[activeStepIndex].title,\n });\n\n const nextStep = STEP_KEYS[activeStepIndex + 1];\n setActiveStep(nextStep);\n };\n\n return (\n \n \n \n \n \n \n );\n };\n\n return (\n \n \n \n \n \n {renderButtons()}\n \n
\n );\n};\n\nEventDefinitionForm.propTypes = {\n action: PropTypes.oneOf(['create', 'edit']),\n eventDefinition: PropTypes.object.isRequired,\n currentUser: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n entityTypes: PropTypes.object.isRequired,\n notifications: PropTypes.array.isRequired,\n defaults: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n};\n\nEventDefinitionForm.defaultProps = {\n action: 'edit',\n};\n\nexport default EventDefinitionForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React, { useCallback, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useNavigate } from 'react-router-dom';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport Routes from 'routing/Routes';\nimport { useStore } from 'stores/connect';\nimport EventDefinitionPriorityEnum from 'logic/alerts/EventDefinitionPriorityEnum';\nimport { ConfirmLeaveDialog, Spinner } from 'components/common';\nimport { AvailableEventDefinitionTypesStore } from 'stores/event-definitions/AvailableEventDefinitionTypesStore';\nimport { ConfigurationsActions } from 'stores/configurations/ConfigurationsStore';\nimport { EventDefinitionsActions } from 'stores/event-definitions/EventDefinitionsStore';\nimport { EventNotificationsActions, EventNotificationsStore } from 'stores/event-notifications/EventNotificationsStore';\nimport 'components/event-notifications/event-notification-types';\nimport type { EventDefinition } from 'components/event-definitions/event-definitions-types';\nimport useCurrentUser from 'hooks/useCurrentUser';\nimport useEventDefinitionConfigFromLocalStorage from 'components/event-definitions/hooks/useEventDefinitionConfigFromLocalStorage';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport useLocation from 'routing/useLocation';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nimport EventDefinitionForm from './EventDefinitionForm';\n\nconst fetchNotifications = () => {\n EventNotificationsActions.listAll();\n};\n\ntype Props = {\n action: 'edit' | 'create',\n eventDefinition: EventDefinition,\n onEventDefinitionChange: (nextEventDefinition: EventDefinition) => void,\n}\n\nconst getConditionPlugin = (edType): any => {\n if (edType === undefined) {\n return {};\n }\n\n return PluginStore.exports('eventDefinitionTypes').find((eventDefinitionType) => eventDefinitionType.type === edType) || {};\n};\n\nconst EventDefinitionFormContainer = ({ action, eventDefinition: eventDefinitionInitial, onEventDefinitionChange }: Props) => {\n const [eventDefinition, setEventDefinition] = useState(eventDefinitionInitial);\n const [validation, setValidation] = useState({ errors: {} });\n const [eventsClusterConfig, setEventsClusterConfig] = useState(undefined);\n const [isDirty, setIsDirty] = useState(false);\n const { configFromLocalStorage, hasLocalStorageConfig } = useEventDefinitionConfigFromLocalStorage();\n\n const entityTypes = useStore(AvailableEventDefinitionTypesStore);\n const notifications = useStore(EventNotificationsStore);\n const currentUser = useCurrentUser();\n const navigate = useNavigate();\n const { pathname } = useLocation();\n const sendTelemetry = useSendTelemetry();\n\n const isLoading = !entityTypes || !notifications.all || !eventsClusterConfig;\n const defaults = { default_backlog_size: eventsClusterConfig?.events_notification_default_backlog };\n\n const fetchClusterConfig = useCallback(() => {\n ConfigurationsActions.listEventsClusterConfig().then((config) => setEventsClusterConfig(config));\n }, []);\n\n const handleChange = useCallback((key: string, value: unknown) => {\n setEventDefinition((prev) => ({ ...prev, [key]: value }));\n onEventDefinitionChange({ ...eventDefinition, [key]: value });\n setIsDirty(true);\n }, [eventDefinition, onEventDefinitionChange, setEventDefinition, setIsDirty]);\n\n useEffect(() => {\n fetchClusterConfig();\n fetchNotifications();\n\n if (hasLocalStorageConfig) {\n const conditionPlugin = getConditionPlugin(configFromLocalStorage.type);\n const defaultConfig = conditionPlugin?.defaultConfig || {} as EventDefinition['config'];\n\n setEventDefinition((cur) => {\n const cloned = cloneDeep(cur);\n\n return ({\n ...cloned,\n config: {\n ...defaultConfig,\n ...cloned.config,\n ...configFromLocalStorage,\n },\n });\n });\n }\n }, [configFromLocalStorage, fetchClusterConfig, hasLocalStorageConfig]);\n\n const handleSubmitSuccessResponse = () => {\n setIsDirty(false);\n navigate(Routes.ALERTS.DEFINITIONS.LIST);\n };\n\n const handleSubmitFailureResponse = (errorResponse) => {\n const { body } = errorResponse.additional;\n\n if (errorResponse.status === 400) {\n if (body && body.failed) {\n setValidation(body);\n\n return;\n }\n\n if (body.type && body.type === 'ApiError') {\n if (body.message.includes('org.graylog.events.conditions.Expression')\n || body.message.includes('org.graylog.events.conditions.Expr')\n || body.message.includes('org.graylog.events.processor.aggregation.AggregationSeries')) {\n setValidation({\n errors: { conditions: ['Aggregation condition is not valid'] },\n });\n\n return;\n }\n\n if (body.message.includes('embryonic')) {\n setValidation({\n errors: { query_parameters: ['Query parameters must be declared'] },\n });\n }\n }\n }\n };\n\n const handleSubmit = () => {\n if (action === 'create') {\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_SUMMARY.CREATE_CLICKED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: 'new-event-definition',\n app_action_value: 'create-event-definition-button',\n });\n\n EventDefinitionsActions.create(eventDefinition)\n .then(handleSubmitSuccessResponse, handleSubmitFailureResponse);\n } else {\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_SUMMARY.UPDATE_CLICKED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: 'edit-event-definition',\n app_action_value: 'update-event-definition-button',\n });\n\n EventDefinitionsActions.update(eventDefinition.id, eventDefinition)\n .then(handleSubmitSuccessResponse, handleSubmitFailureResponse);\n }\n };\n\n const handleCancel = () => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_SUMMARY.CANCEL_CLICKED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: (action === 'create') ? 'new-event-definition' : 'edit-event-definition',\n app_action_value: 'cancel-button',\n });\n\n navigate(Routes.ALERTS.DEFINITIONS.LIST);\n };\n\n if (isLoading) {\n return ;\n }\n\n return (\n <>\n {isDirty && (\n \n )}\n \n >\n );\n};\n\nEventDefinitionFormContainer.propTypes = {\n action: PropTypes.oneOf(['create', 'edit']),\n eventDefinition: PropTypes.object,\n onEventDefinitionChange: PropTypes.func,\n};\n\nEventDefinitionFormContainer.defaultProps = {\n action: 'edit',\n eventDefinition: {\n title: '',\n description: '',\n priority: EventDefinitionPriorityEnum.NORMAL,\n config: {},\n field_spec: {},\n key_spec: [],\n notification_settings: {\n grace_period_ms: 300000,\n // Defaults to system setting for notification backlog size\n backlog_size: null,\n },\n notifications: [],\n alert: false,\n },\n onEventDefinitionChange: () => {},\n};\n\nexport default EventDefinitionFormContainer;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Alert, Col, Row } from 'components/bootstrap';\n\nimport commonStyles from '../common/commonStyles.css';\n\ntype Props = {\n validation: {\n errors: {\n [name: string]: any\n }\n },\n}\n\nconst EventDefinitionValidationSummary = ({ validation }: Props) => {\n const fieldsWithErrors = Object.keys(validation.errors);\n\n if (fieldsWithErrors.length === 0) {\n return null;\n }\n\n return (\n \n \n \n Please correct the following errors before saving this Event Definition:
\n \n {fieldsWithErrors.map((field) => validation.errors[field].map((error) => {\n const effectiveError = (field === 'config' ? error.replace('config', 'condition') : error);\n\n return - {effectiveError}
;\n }))}\n
\n \n \n
\n );\n};\n\nEventDefinitionValidationSummary.propTypes = {\n validation: PropTypes.object,\n};\n\nEventDefinitionValidationSummary.defaultProps = {\n validation: {\n errors: [],\n },\n};\n\nexport default EventDefinitionValidationSummary;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./EventDefinitionSummary.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./EventDefinitionSummary.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport upperFirst from 'lodash/upperFirst';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport moment from 'moment';\n\nimport 'moment-duration-format';\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Alert, Col, Row } from 'components/bootstrap';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport EventDefinitionPriorityEnum from 'logic/alerts/EventDefinitionPriorityEnum';\nimport type User from 'logic/users/User';\n\nimport EventDefinitionValidationSummary from './EventDefinitionValidationSummary';\nimport styles from './EventDefinitionSummary.css';\n\nimport type { EventDefinition } from '../event-definitions-types';\nimport commonStyles from '../common/commonStyles.css';\nimport { SYSTEM_EVENT_DEFINITION_TYPE } from '../constants';\n\n// Import built-in plugins\nimport 'components/event-definitions/event-definition-types';\nimport 'components/event-notifications/event-notification-types';\n\ntype Props = {\n eventDefinition: Omit,\n notifications: Array,\n validation: {\n errors: {\n title?: string,\n }\n },\n currentUser: User,\n}\n\nconst EventDefinitionSummary = ({ eventDefinition, notifications, validation, currentUser }: Props) => {\n const [showValidation, setShowValidation] = useState(false);\n\n useEffect(() => {\n const flipShowValidation = () => {\n if (!showValidation) {\n setShowValidation(true);\n }\n };\n\n flipShowValidation();\n }, [showValidation, setShowValidation]);\n\n const renderDetails = () => (\n <>\n Details
\n \n - Title
\n - {eventDefinition.title || 'No title given'}
\n - Description
\n - {eventDefinition.description || 'No description given'}
\n - Priority
\n - {upperFirst(EventDefinitionPriorityEnum.properties[eventDefinition.priority].name)}
\n
\n >\n );\n\n const getPlugin = (name, type) => {\n if (type === undefined) {\n return {};\n }\n\n return PluginStore.exports(name).find((edt) => edt.type === type) || {};\n };\n\n const renderCondition = (config) => {\n const conditionPlugin = getPlugin('eventDefinitionTypes', config.type);\n const component = (conditionPlugin.summaryComponent\n ? React.createElement(conditionPlugin.summaryComponent, {\n config,\n currentUser,\n })\n : Condition plugin {config.type} does not provide a summary.
\n );\n\n return (\n <>\n {conditionPlugin.displayName || config.type}
\n {component}\n >\n );\n };\n\n const renderField = (fieldName, config, keys) => {\n if (!config.providers || config.providers.length === 0) {\n return No field value provider configured.;\n }\n\n const provider = config.providers[0] || {};\n const fieldProviderPlugin = getPlugin('fieldValueProviders', provider.type);\n\n return (fieldProviderPlugin.summaryComponent\n ? React.createElement(fieldProviderPlugin.summaryComponent, {\n fieldName,\n config,\n keys: keys,\n key: fieldName,\n currentUser,\n })\n : Provider plugin {provider.type} does not provide a summary.
\n );\n };\n\n const renderFieldList = (fieldNames, fields, keys) => (\n <>\n \n - Keys
\n - {keys.length > 0 ? keys.join(', ') : 'No Keys configured for Events based on this Definition.'}
\n
\n {fieldNames.sort(naturalSort).map((fieldName) => renderField(fieldName, fields[fieldName], keys))}\n >\n );\n\n const renderFields = (fields, keys) => {\n const fieldNames = Object.keys(fields);\n\n return (\n <>\n Fields
\n {fieldNames.length === 0\n ? No Fields configured for Events based on this Definition.
\n : renderFieldList(fieldNames, fields, keys)}\n >\n );\n };\n\n const renderNotification = (definitionNotification) => {\n const notification = notifications.find((n) => n.id === definitionNotification.notification_id);\n\n let content;\n\n if (notification) {\n const notificationPlugin = getPlugin('eventNotificationTypes', notification.config.type);\n\n content = (notificationPlugin.summaryComponent\n ? React.createElement(notificationPlugin.summaryComponent, {\n type: notificationPlugin.displayName,\n notification: notification,\n definitionNotification: definitionNotification,\n })\n : Notification plugin {notification.config.type} does not provide a summary.
\n );\n } else {\n content = (\n \n Could not find information for Notification {definitionNotification.notification_id}.\n
\n );\n }\n\n return (\n \n {content}\n \n );\n };\n\n const renderNotificationSettings = (notificationSettings) => {\n const formattedDuration = moment.duration(notificationSettings.grace_period_ms)\n .format('d [days] h [hours] m [minutes] s [seconds]', { trim: 'all' });\n\n const formattedGracePeriod = (notificationSettings.grace_period_ms\n ? `Grace Period is set to ${formattedDuration}`\n : 'Grace Period is disabled');\n\n const formattedBacklogSize = (notificationSettings.backlog_size\n ? `Notifications will include ${notificationSettings.backlog_size} messages`\n : 'Notifications will not include any messages.');\n\n return (\n <>\n Settings
\n \n - {formattedGracePeriod}
\n - {formattedBacklogSize}
\n
\n >\n );\n };\n\n const renderNotifications = (definitionNotifications, notificationSettings) => {\n const effectiveDefinitionNotifications = definitionNotifications\n .filter((n) => isPermitted(currentUser.permissions, `eventnotifications:read:${n.notification_id}`));\n const notificationsWithMissingPermissions = definitionNotifications\n .filter((n) => !effectiveDefinitionNotifications.map((nObj) => nObj.notification_id).includes(n.notification_id));\n const warning = notificationsWithMissingPermissions.length > 0\n ? (\n \n Missing Notifications Permissions for:
\n {notificationsWithMissingPermissions.map((n) => n.notification_id).join(', ')}\n \n )\n : null;\n\n return (\n <>\n Notifications
\n \n {warning}\n
\n {effectiveDefinitionNotifications.length === 0 && notificationsWithMissingPermissions.length <= 0\n ? This Event is not configured to trigger any Notifications.
\n : (\n <>\n {renderNotificationSettings(notificationSettings)}\n {definitionNotifications.map(renderNotification)}\n >\n )}\n >\n );\n };\n\n const isSystemEventDefinition = eventDefinition.config.type === SYSTEM_EVENT_DEFINITION_TYPE;\n\n return (\n \n \n Event Summary
\n {showValidation && }\n \n \n {renderDetails()}\n \n\n {!isSystemEventDefinition && (\n \n {renderCondition(eventDefinition.config)}\n \n )}\n
\n \n {!isSystemEventDefinition && (\n \n {renderFields(eventDefinition.field_spec, eventDefinition.key_spec)}\n \n )}\n \n {renderNotifications(eventDefinition.notifications, eventDefinition.notification_settings)}\n \n
\n \n
\n );\n};\n\nEventDefinitionSummary.propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n notifications: PropTypes.array.isRequired,\n validation: PropTypes.object,\n currentUser: PropTypes.object.isRequired,\n};\n\nEventDefinitionSummary.defaultProps = {\n validation: undefined,\n};\n\nexport default EventDefinitionSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { FormSubmit, Select, Spinner } from 'components/common';\nimport { Alert, Button, Col, ControlLabel, FormControl, FormGroup, HelpBlock, Row, Input } from 'components/bootstrap';\nimport { getValueFromInput } from 'util/FormsUtils';\nimport withTelemetry from 'logic/telemetry/withTelemetry';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\nimport withLocation from 'routing/withLocation';\n\nconst getNotificationPlugin = (type) => {\n if (type === undefined) {\n return {};\n }\n\n return PluginStore.exports('eventNotificationTypes').find((n) => n.type === type) || {};\n};\n\nconst formattedEventNotificationTypes = () => PluginStore.exports('eventNotificationTypes')\n .map((type) => ({ label: type.displayName, value: type.type }));\n\nclass EventNotificationForm extends React.Component {\n static propTypes = {\n action: PropTypes.oneOf(['create', 'edit']),\n notification: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n testResult: PropTypes.shape({\n isLoading: PropTypes.bool,\n error: PropTypes.bool,\n message: PropTypes.string,\n }).isRequired,\n formId: PropTypes.string,\n embedded: PropTypes.bool.isRequired,\n onChange: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onTest: PropTypes.func.isRequired,\n sendTelemetry: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n };\n\n static defaultProps = {\n action: 'edit',\n formId: undefined,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n isSubmitEnabled: true,\n };\n }\n\n setIsSubmitEnabled = (enabled) => {\n this.setState({ isSubmitEnabled: enabled });\n };\n\n handleSubmit = (event) => {\n const { notification, onSubmit, sendTelemetry, action, location } = this.props;\n\n sendTelemetry(\n action === 'create'\n ? TELEMETRY_EVENT_TYPE.NOTIFICATIONS.CREATE_CLICKED\n : TELEMETRY_EVENT_TYPE.NOTIFICATIONS.EDIT_CLICKED, {\n app_pathname: getPathnameWithoutId(location.pathname),\n app_section: 'event-notification',\n app_action_value: `${action}-button`,\n });\n\n event.preventDefault();\n\n onSubmit(notification);\n };\n\n handleChange = (event) => {\n const { name } = event.target;\n const { onChange } = this.props;\n\n onChange(name, getValueFromInput(event.target));\n };\n\n handleConfigChange = (nextConfig) => {\n const { onChange } = this.props;\n\n onChange('config', nextConfig);\n };\n\n handleTypeChange = (nextType) => {\n const { sendTelemetry, location } = this.props;\n\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_NOTIFICATIONS.NOTIFICATION_TYPE_SELECTED, {\n app_pathname: getPathnameWithoutId(location.pathname),\n app_section: 'event-definition-notifications',\n app_action_value: 'notification-type-select',\n notification_type: nextType,\n });\n\n const notificationPlugin = getNotificationPlugin(nextType);\n const defaultConfig = notificationPlugin.defaultConfig || {};\n\n this.handleConfigChange({ ...defaultConfig, type: nextType });\n };\n\n handleTestTrigger = () => {\n const { notification, onTest, sendTelemetry, location } = this.props;\n\n sendTelemetry(TELEMETRY_EVENT_TYPE.NOTIFICATIONS.EXECUTE_TEST_CLICKED, {\n app_pathname: getPathnameWithoutId(location.pathname),\n app_section: 'event-notification',\n app_action_value: 'execute-test-button',\n });\n\n onTest(notification);\n };\n\n render() {\n const { action, embedded, formId, notification, onCancel, validation, testResult } = this.props;\n const { isSubmitEnabled } = this.state;\n\n const notificationPlugin = getNotificationPlugin(notification.config.type);\n const notificationFormComponent = notificationPlugin.formComponent\n ? React.createElement(notificationPlugin.formComponent, {\n config: notification.config,\n onChange: this.handleConfigChange,\n validation: validation,\n setIsSubmitEnabled: this.setIsSubmitEnabled,\n })\n : null;\n\n const testButtonText = testResult.isLoading ? : 'Execute Test Notification';\n\n return (\n \n \n \n \n
\n );\n }\n}\n\nexport default withLocation(withTelemetry(EventNotificationForm));\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clone from 'lodash/clone';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { ConfirmLeaveDialog } from 'components/common';\nimport Routes from 'routing/Routes';\nimport { EventNotificationsActions } from 'stores/event-notifications/EventNotificationsStore';\nimport withHistory from 'routing/withHistory';\n\nimport EventNotificationForm from './EventNotificationForm';\n\n// Import built-in Event Notification Types\n\nimport '../event-notification-types';\n\nconst initialValidation = {\n errors: {},\n};\n\nconst initialTestResult = {\n isLoading: false,\n};\n\nclass EventNotificationFormContainer extends React.Component {\n static propTypes = {\n action: PropTypes.oneOf(['create', 'edit']),\n notification: PropTypes.object,\n /** Controls whether the form should be embedded into another one, and submitted/cancel externally */\n embedded: PropTypes.bool,\n /** Controls the ID of the form, so it can be controlled externally */\n formId: PropTypes.string,\n onSubmit: PropTypes.func,\n history: PropTypes.object.isRequired,\n };\n\n static defaultProps = {\n action: 'edit',\n notification: {\n title: '',\n description: '',\n config: {},\n },\n embedded: false,\n formId: undefined,\n onSubmit: () => {},\n };\n\n static scrollToFirstError() {\n if (document.getElementsByClassName('has-error')[0] !== undefined) {\n document.getElementsByClassName('has-error')[0].scrollIntoView(true);\n }\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n notification: props.notification,\n validation: initialValidation,\n testResult: initialTestResult,\n isDirty: false,\n };\n }\n\n componentWillUnmount() {\n // Test request may take a while to return a result, cancel the promise before leaving the page.\n if (this.testPromise) {\n this.testPromise.cancel();\n }\n }\n\n handleChange = (key, value) => {\n const { notification } = this.state;\n const nextNotification = cloneDeep(notification);\n\n nextNotification[key] = value;\n this.setState({ notification: nextNotification, isDirty: true, testResult: initialTestResult });\n };\n\n handleCancel = () => {\n const { history } = this.props;\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\n };\n\n handleSubmit = () => {\n const { action, embedded, onSubmit, history } = this.props;\n const { notification } = this.state;\n\n let promise;\n\n if (action === 'create') {\n promise = EventNotificationsActions.create(notification);\n\n promise.then(\n () => {\n this.setState({ isDirty: false }, () => {\n if (!embedded) {\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\n }\n });\n },\n (errorResponse) => {\n const { body } = errorResponse.additional;\n\n if (errorResponse.status === 400 && body && body.failed) {\n this.setState({ validation: body });\n EventNotificationFormContainer.scrollToFirstError();\n }\n },\n );\n } else {\n promise = EventNotificationsActions.update(notification.id, notification);\n\n promise.then(\n () => {\n this.setState({ isDirty: false }, () => {\n if (!embedded) {\n history.push(Routes.ALERTS.NOTIFICATIONS.LIST);\n }\n });\n },\n (errorResponse) => {\n const { body } = errorResponse.additional;\n\n if (errorResponse.status === 400 && body && body.failed) {\n this.setState({ validation: body });\n EventNotificationFormContainer.scrollToFirstError();\n }\n },\n );\n }\n\n onSubmit(promise);\n };\n\n handleTest = () => {\n const { notification } = this.state;\n\n this.setState({ testResult: { isLoading: true }, validation: initialValidation });\n const testResult = clone(initialTestResult);\n\n this.testPromise = EventNotificationsActions.test(notification);\n\n this.testPromise\n .then(\n (response) => {\n testResult.error = false;\n testResult.message = 'Notification was executed successfully.';\n\n return response;\n },\n (errorResponse) => {\n testResult.error = true;\n const { body } = errorResponse.additional;\n\n if (errorResponse.status === 400 && body && body.failed) {\n testResult.message = 'Validation failed, please correct any errors in the form before continuing.';\n this.setState({ validation: body });\n } else {\n testResult.message = errorResponse.responseMessage || 'Unknown error, please check your Graylog server logs.';\n }\n },\n )\n .finally(() => {\n this.setState({ testResult: testResult });\n this.testPromise = undefined;\n });\n };\n\n render() {\n const { action, embedded, formId } = this.props;\n const { notification, validation, testResult, isDirty } = this.state;\n\n return (\n <>\n {!embedded && isDirty && (\n \n )}\n \n >\n );\n }\n}\n\nexport default withHistory(EventNotificationFormContainer);\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nconst EventDefinitionPriorityEnum = {\n LOW: 1,\n NORMAL: 2,\n HIGH: 3,\n properties: {\n 1: { name: 'low' },\n 2: { name: 'normal' },\n 3: { name: 'high' },\n },\n};\n\nexport default EventDefinitionPriorityEnum;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { Subtract } from 'utility-types';\n\nimport type { HistoryFunction } from './useHistory';\nimport useHistory from './useHistory';\n\ntype HistoryContext = {\n history: HistoryFunction;\n};\n\nconst withParams = (Component: React.ComponentType): React.ComponentType> => (props) => {\n const history = useHistory();\n\n return ;\n};\n\nexport default withParams;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n"],"names":["___CSS_LOADER_EXPORT___","module","SYSTEM_EVENT_DEFINITION_TYPE","ENTITY_TABLE_ID","DEFAULT_LAYOUT","ADDITIONAL_ATTRIBUTES","AvailableEventDefinitionTypesActions","singleton","AvailableEventDefinitionTypesStore","URLUtils","response","sessionId","useQuery","parsedLocalStorageConfig","Store","type","query","streams","search_within_ms","group_by","agg_function","agg_field","agg_value","loc_query_parameters","aggData","priorityOptions","EventDefinitionPriorityEnum","value","key","EventDetailsForm","eventDefinition","validation","onChange","pathname","useLocation","sendTelemetry","useSendTelemetry","handleChange","event","name","FormsUtils","handlePriorityChange","nextPriority","isSystemEventDefinition","commonStyles","options","update","action","entityTypes","currentUser","getConditionPlugin","eventDefinitionType","sortedEventDefinitionTypes","eventDefinitionType1","eventDefinitionType2","eventDefinitionType1Order","eventDefinitionType2Order","sort","formattedEventDefinitionTypes","handleEventDefinitionTypeChange","nextType","conditionPlugin","defaultConfig","renderConditionTypeDescriptions","typeDescriptions","disabledSelect","edt","eventDefinitionTypeComponent","HelpPanel","EventKeyHelpPopover","props","id","otherProps","title","requiredFields","getProviderPlugin","getConfigProviderType","config","defaultValue","formatFieldValueProviders","FieldForm","isKey","keyPosition","errors","providerType","pluginRequiredFields","requiredField","errorNumber","prevFieldName","fieldName","nextFieldName","nextConfig","nextProvider","defaultProviderConfig","nextPosition","checked","providerPlugin","keyIndex","withLocation","withTelemetry","HEADERS","getFieldValueProviderPlugin","p","providerFormatter","configKeys","onAddFieldClick","onEditFieldClick","onRemoveFieldClick","fields","keys","fieldProviderPlugin","fieldNames","addCustomFieldButton","nextProviders","templateProvider","provider","helpText","displayDetails","children","TemplateFieldValueProviderSummary","fieldTypes","ftA","ftB","fieldType","ft","lookupProvider","nextLookupTable","lookupTables","lt1","lt2","table","allFieldTypes","LOOKUP_PERMISSIONS","LookupTableFieldValueProviderFormContainer","useFieldTypes","LookupTablesStore","LookupTableFieldValueProviderSummary","FieldsForm","editField","setEditField","showFieldForm","setShowFieldForm","removeCustomField","nextFieldSpec","nextKeySpec","toggleFieldForm","addCustomField","fieldErrors","keyErrors","error","AddNotificationForm","promise","notification","selectedNotification","nextNotificationId","notifications","hasCreationPermissions","formattedNotifications","n","displayNewNotificationForm","doneButton","EventNotificationFormContainer","TIME_UNITS","Container","theme","NotificationSettingsForm","onSettingsChange","nextNotificationSettings","nextValue","nextUnit","enabled","durationInMs","isBacklogSizeEnabled","backlogSize","gracePeriodMs","gracePeriod","defaultBacklogSize","effectiveBacklogSize","gracePeriodDuration","gracePeriodUnit","NotificationList","notificationId","onRemoveNotificationClick","plugin","onAddNotificationClick","definitionNotifications","edn","addNotificationButton","showAddNotificationForm","nextNotification","nextNotifications","defaults","missingPermissions","Routes","STEP_KEYS","STEP_TELEMETRY_KEYS","WizardContainer","EventDefinitionForm","onCancel","onSubmit","step","activeStep","setActiveStep","history","useHistory","currentUrl","newUrl","handleSubmit","defaultStepProps","steps","EventDefinitionSummary","handleStepChange","nextStep","renderButtons","activeStepIndex","handlePreviousClick","previousStep","handleNextClick","fetchNotifications","edType","EventDefinitionFormContainer","eventDefinitionInitial","onEventDefinitionChange","setEventDefinition","setValidation","eventsClusterConfig","setEventsClusterConfig","isDirty","setIsDirty","configFromLocalStorage","hasLocalStorageConfig","EventNotificationsStore","useCurrentUser","navigate","isLoading","fetchClusterConfig","prev","cur","cloned","handleSubmitSuccessResponse","handleSubmitFailureResponse","errorResponse","body","handleCancel","EventDefinitionValidationSummary","fieldsWithErrors","field","effectiveError","showValidation","setShowValidation","renderDetails","getPlugin","renderCondition","component","renderField","renderFieldList","renderFields","renderNotification","definitionNotification","content","notificationPlugin","renderNotificationSettings","notificationSettings","formattedDuration","formattedGracePeriod","formattedBacklogSize","renderNotifications","effectiveDefinitionNotifications","notificationsWithMissingPermissions","nObj","warning","getNotificationPlugin","formattedEventNotificationTypes","EventNotificationForm","location","onTest","embedded","formId","testResult","isSubmitEnabled","notificationFormComponent","testButtonText","initialValidation","initialTestResult","withHistory","Component","baseClone","CLONE_SYMBOLS_FLAG","clone"],"sourceRoot":""}