All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.325e2d4b-9138.0712dacfc5a329cc54ea.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.1
Show newest version
{"version":3,"file":"325e2d4b-9138.0712dacfc5a329cc54ea.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/common/PageNavigation.tsx","webpack://graylog-web-interface/./src/components/pipelines/PipelineConnectionsList.tsx","webpack://graylog-web-interface/./src/components/pipelines/PipelinesPageNavigation.tsx","webpack://graylog-web-interface/./src/components/pipelines/StageForm.tsx","webpack://graylog-web-interface/./src/components/pipelines/StageRules.tsx","webpack://graylog-web-interface/./src/components/pipelines/Stage.tsx","webpack://graylog-web-interface/./src/components/pipelines/PipelineForm.tsx","webpack://graylog-web-interface/./src/components/pipelines/PipelineDetails.tsx","webpack://graylog-web-interface/./src/components/pipelines/PipelineConnectionsForm.tsx","webpack://graylog-web-interface/./src/components/pipelines/Pipeline.tsx","webpack://graylog-web-interface/./src/components/pipelines/NewPipeline.tsx","webpack://graylog-web-interface/./src/logic/pipelines/SourceGenerator.js","webpack://graylog-web-interface/./src/pages/PipelineDetailsPage.jsx","webpack://graylog-web-interface/./src/stores/pipelines/PipelineConnectionsStore.ts","webpack://graylog-web-interface/./src/stores/pipelines/PipelinesStore.ts","webpack://graylog-web-interface/./src/stores/rules/RulesStore.ts"],"sourcesContent":["/*\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 styled, { css } from 'styled-components';\n\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { LinkContainer } from 'components/common/router';\nimport { IfPermitted } from 'components/common';\nimport NavItemStateIndicator, {\n  hoverIndicatorStyles,\n  activeIndicatorStyles,\n} from 'components/common/NavItemStateIndicator';\n\nconst Container = styled(ButtonToolbar)`\n  margin-bottom: 10px;\n`;\n\nconst StyledButton = styled(Button)(({ theme }) => css`\n  font-family: ${theme.fonts.family.navigation};\n  font-size: ${theme.fonts.size.navigation};\n\n  &&&& {\n    color: ${theme.colors.variant.darker.default};\n    \n    :hover, :focus {\n      text-decoration: none;  \n    }\n\n    :hover {\n      ${hoverIndicatorStyles(theme)}\n    }\n\n    &.active {\n      color: ${theme.colors.global.textDefault};\n\n      ${activeIndicatorStyles(theme)}\n\n      :hover, :focus {\n        ${activeIndicatorStyles(theme)}\n      }\n    }\n  }\n`);\n\nStyledButton.displayName = 'Button';\n\ntype Props = {\n  /**\n   * List of nav items. Define permissions, if the item should only be displayed for users with specific permissions.\n   * By default, an item is active if the current URL starts with the item URL.\n   * If you only want to display an item as active only when its path matches exactly, set `exactPathMatch` to true.\n   */\n  items: Array<{\n    title: string,\n    path: string,\n    permissions?: string | Array\n    exactPathMatch?: boolean,\n  }>\n}\n\n/**\n * Simple tab navigation to allow navigating to subareas of a page.\n */\nconst PageNavigation = ({ items }: Props) => (\n  \n    {items.map(({ path, title, permissions, exactPathMatch }) => {\n      if (!path) {\n        return null;\n      }\n\n      return (\n        \n          \n            \n              \n                {title}\n              \n            \n          \n        \n      );\n    })}\n  \n);\n\nexport default PageNavigation;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport type { PipelineType } from 'stores/pipelines/PipelinesStore';\nimport type { PipelineConnectionsType } from 'stores/pipelines/PipelineConnectionsStore';\nimport type { Stream } from 'stores/streams/StreamsStore';\n\ntype Props = {\n  pipeline: PipelineType,\n  connections: PipelineConnectionsType[],\n  streams: Stream[],\n  streamsFormatter: (streams: Stream[]) => React.ReactNode,\n  noConnectionsMessage?: React.ReactNode,\n}\n\nconst PipelineConnectionsList = ({ pipeline, connections, streams, streamsFormatter, noConnectionsMessage }: Props) => {\n  const streamsUsingPipeline = connections\n    .filter((c) => c.pipeline_ids && c.pipeline_ids.includes(pipeline.id)) // Get connections for this pipeline\n    .filter((c) => streams.some((s) => s.id === c.stream_id)) // Filter out deleted streams\n    .map((c) => streams.find((s) => s.id === c.stream_id))\n    .sort((s1, s2) => naturalSort(s1.title, s2.title));\n\n  return (\n    \n      {streamsUsingPipeline.length === 0 ? noConnectionsMessage : streamsFormatter(streamsUsingPipeline)}\n    \n  );\n};\n\nPipelineConnectionsList.propTypes = {\n  pipeline: PropTypes.object.isRequired,\n  connections: PropTypes.array.isRequired,\n  streams: PropTypes.array.isRequired,\n  streamsFormatter: PropTypes.func.isRequired,\n  noConnectionsMessage: PropTypes.node,\n};\n\nPipelineConnectionsList.defaultProps = {\n  noConnectionsMessage: 'Pipeline not connected to any streams',\n};\n\nexport default PipelineConnectionsList;\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';\n\nimport PageNavigation from 'components/common/PageNavigation';\nimport Routes from 'routing/Routes';\nimport { Row } from 'components/bootstrap';\n\nconst NAV_ITEMS = [\n  { title: 'Manage pipelines', path: Routes.SYSTEM.PIPELINES.OVERVIEW, exactPathMatch: true },\n  { title: 'Manage rules', path: Routes.SYSTEM.PIPELINES.RULES },\n  { title: 'Simulator', path: Routes.SYSTEM.PIPELINES.SIMULATOR },\n];\n\nconst EventsPageNavigation = () => (\n  \n    \n  \n);\n\nexport default EventsPageNavigation;\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 PropTypes from 'prop-types';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { useStore } from 'stores/connect';\nimport { Link } from 'components/common/router';\nimport { SelectableList } from 'components/common';\nimport { Button, ControlLabel, FormGroup, BootstrapModalForm, Input } from 'components/bootstrap';\nimport { getValueFromInput } from 'util/FormsUtils';\nimport NumberUtils from 'util/NumberUtils';\nimport Routes from 'routing/Routes';\nimport type { PipelineType, StageType } from 'stores/pipelines/PipelinesStore';\nimport { RulesStore } from 'stores/rules/RulesStore';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport useCurrentUser from 'hooks/useCurrentUser';\n\ntype Props = {\n  pipeline: PipelineType,\n  stage?: StageType,\n  create: boolean,\n  save: (nextStage: StageType, callback: () => void) => void,\n};\n\nconst StageForm = ({ pipeline, stage, create, save }: Props) => {\n  const currentUser = useCurrentUser();\n  const modalRef = useRef();\n\n  const _initialStageNumber = useMemo(() => (\n    create ? Math.max(...pipeline.stages.map((s) => s.stage)) + 1 : stage.stage\n  ), [create, pipeline.stages, stage.stage]);\n\n  const [nextStage, setNextStage] = useState({ ...stage, stage: _initialStageNumber });\n  const { rules } = useStore(RulesStore);\n\n  const openModal = () => {\n    if (modalRef.current) {\n      modalRef.current.open();\n    }\n  };\n\n  const _onChange = ({ target }) => {\n    setNextStage((currentStage) => ({ ...currentStage, [target.name]: getValueFromInput(target) }));\n  };\n\n  const _onRulesChange = (newRules) => {\n    setNextStage((currentStage) => ({ ...currentStage, rules: newRules }));\n  };\n\n  const _closeModal = () => {\n    if (modalRef.current) {\n      modalRef.current.close();\n    }\n  };\n\n  const _onSaved = () => {\n    _closeModal();\n  };\n\n  const isOverridingStage = useMemo(() => (\n    nextStage.stage !== _initialStageNumber && pipeline.stages.some(({ stage: s }) => s === nextStage.stage)\n  ), [nextStage.stage, _initialStageNumber, pipeline.stages]);\n\n  const _handleSave = () => {\n    if (!isOverridingStage) {\n      save(nextStage, _onSaved);\n    }\n  };\n\n  const _formatRuleOption = ({ title }) => {\n    return { value: title, label: title };\n  };\n\n  const _filterChosenRules = (rule, chosenRules) => {\n    return !chosenRules.includes(rule.title);\n  };\n\n  const _getFormattedOptions = useCallback(() => {\n    const chosenRules = nextStage.rules;\n\n    return rules ? rules.filter((rule) => _filterChosenRules(rule, chosenRules)).map(_formatRuleOption) : [];\n  }, [nextStage.rules, rules]);\n\n  const rulesHelp = (\n    \n      Select the rules evaluated on this stage, or create one in the{' '}\n      Pipeline Rules page.\n    \n  );\n\n  return (\n    \n      \n      \n        
\n \n\n \n Continue processing on next stage when\n \n\n \n\n \n\n \n\n \n \n \n
\n
\n
\n );\n};\n\nStageForm.propTypes = {\n pipeline: PropTypes.object.isRequired,\n stage: PropTypes.object,\n create: PropTypes.bool,\n save: PropTypes.func.isRequired,\n};\n\nStageForm.defaultProps = {\n create: false,\n stage: {\n stage: 0,\n match: 'EITHER',\n rules: [],\n },\n};\n\nexport default StageForm;\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 styled from 'styled-components';\n\nimport { DataTable, Icon } from 'components/common';\nimport { Link } from 'components/common/router';\nimport Routes from 'routing/Routes';\nimport { MetricContainer, CounterRate } from 'components/metrics';\nimport type { PipelineType, StageType } from 'stores/pipelines/PipelinesStore';\nimport type { RuleType } from 'stores/rules/RulesStore';\n\nconst TitleTd = styled.td`\n width: 400px;\n`;\n\ntype Props = {\n pipeline: PipelineType,\n stage: StageType,\n rules: RuleType[],\n};\n\nconst StageRules = ({ pipeline, stage, rules }: Props) => {\n const headers = ['Title', 'Description', 'Throughput', 'Errors'];\n\n const _ruleRowFormatter = (ruleArg, ruleIdx) => {\n let rule = ruleArg;\n\n let ruleTitle;\n\n // this can happen when a rule has been renamed, but not all references are updated\n if (!rule) {\n rule = {\n id: `invalid-${ruleIdx}`,\n description: `Rule ${stage.rules[ruleIdx]} has been renamed or removed. This rule will be skipped.`,\n };\n\n ruleTitle = {stage.rules[ruleIdx]};\n } else {\n ruleTitle = (\n \n {rule.title}\n \n );\n }\n\n return (\n \n \n {ruleTitle}\n \n {rule.description}\n \n \n \n \n \n \n \n \n \n \n \n );\n };\n\n return (\n ({header})}\n rows={rules}\n dataRowFormatter={_ruleRowFormatter}\n noDataText=\"This stage has no rules yet. Click on edit to add some.\"\n filterLabel=\"\"\n filterKeys={[]} />\n );\n};\n\nStageRules.propTypes = {\n pipeline: PropTypes.object.isRequired,\n stage: PropTypes.object.isRequired,\n rules: PropTypes.array,\n};\n\nStageRules.defaultProps = {\n rules: [],\n};\n\nexport default StageRules;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Col, Button } from 'components/bootstrap';\nimport { EntityListItem, Spinner } from 'components/common';\nimport { MetricContainer, CounterRate } from 'components/metrics';\nimport type { PipelineType, StageType } from 'stores/pipelines/PipelinesStore';\nimport { useStore } from 'stores/connect';\nimport { RulesStore } from 'stores/rules/RulesStore';\nimport type { RuleType } from 'stores/rules/RulesStore';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport useCurrentUser from 'hooks/useCurrentUser';\n\nimport StageForm from './StageForm';\nimport StageRules from './StageRules';\n\ntype Props = {\n stage: StageType,\n pipeline: PipelineType,\n isLastStage: boolean,\n onUpdate: (nextStage: StageType, callback: () => void) => void,\n onDelete: () => void,\n};\n\nconst Stage = ({ stage, pipeline, isLastStage, onUpdate, onDelete }: Props) => {\n const currentUser = useCurrentUser();\n const { rules: allRules }: { rules: RuleType[] } = useStore(RulesStore);\n\n const suffix = `Contains ${(stage.rules.length === 1 ? '1 rule' : `${stage.rules.length} rules`)}`;\n\n const throughput = (\n \n \n \n );\n\n const actions = [\n ,\n ,\n ];\n\n let description;\n\n if (isLastStage) {\n description = 'There are no further stages in this pipeline. Once rules in this stage are applied, the pipeline will have finished processing.';\n } else {\n let matchText;\n\n switch (stage.match) {\n case 'ALL':\n matchText = 'all rules';\n break;\n case 'EITHER':\n matchText = 'at least one rule';\n break;\n case 'PASS':\n matchText = 'none or more rules';\n break;\n default:\n matchText = 'UNKNOWN';\n break;\n }\n\n description = (\n \n Messages satisfying {matchText}{' '}\n in this stage, will continue to the next stage.\n \n );\n }\n\n const block = (\n \n {description}\n
\n {throughput}\n
\n );\n\n const content = (allRules\n ? (\n allRules.filter((r) => r.title === name)[0])} />\n )\n : );\n\n return (\n {content}} />\n );\n};\n\nStage.propTypes = {\n stage: PropTypes.object.isRequired,\n pipeline: PropTypes.object.isRequired,\n isLastStage: PropTypes.bool.isRequired,\n onUpdate: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n};\n\nexport default Stage;\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 PropTypes from 'prop-types';\nimport React, { useRef, useState } from 'react';\nimport { cloneDeep } from 'lodash';\n\nimport { Row, Col, Button, BootstrapModalForm, Input } from 'components/bootstrap';\nimport { getValueFromInput } from 'util/FormsUtils';\nimport type { PipelineType } from 'stores/pipelines/PipelinesStore';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport useCurrentUser from 'hooks/useCurrentUser';\nimport { FormSubmit } from 'components/common';\n\ntype Props = {\n pipeline: PipelineType,\n create: boolean,\n modal: boolean,\n save: (pipeline: PipelineType, callback: () => void) => void,\n onCancel?: () => void,\n};\n\nconst PipelineForm = ({ pipeline, create, modal, save, onCancel }: Props) => {\n const currentUser = useCurrentUser();\n const modalRef = useRef();\n const [nextPipeline, setNextPipeline] = useState(cloneDeep(pipeline));\n\n const _openModal = () => {\n if (modalRef.current) {\n modalRef.current.open();\n }\n };\n\n const _onChange = ({ target }) => {\n setNextPipeline((currentPipeline) => ({ ...currentPipeline, [target.name]: getValueFromInput(target) }));\n };\n\n const _closeModal = () => {\n if (modalRef.current) {\n modalRef.current.close();\n }\n };\n\n const _onSaved = () => {\n _closeModal();\n\n if (create) {\n setNextPipeline(cloneDeep(pipeline));\n }\n };\n\n const _handleSubmit = (event) => {\n if (event) {\n event.preventDefault();\n }\n\n save(nextPipeline, _onSaved);\n };\n\n const content = (\n
\n \n\n \n
\n );\n\n if (modal) {\n return (\n \n \n \n {content}\n \n \n );\n }\n\n return (\n
\n {content}\n \n \n \n \n \n
\n );\n};\n\nPipelineForm.propTypes = {\n pipeline: PropTypes.object,\n create: PropTypes.bool,\n modal: PropTypes.bool,\n save: PropTypes.func.isRequired,\n onCancel: PropTypes.func,\n};\n\nPipelineForm.defaultProps = {\n modal: true,\n create: false,\n pipeline: {\n id: undefined,\n title: '',\n description: '',\n stages: [{ stage: 0, rules: [] }],\n },\n onCancel: () => {},\n};\n\nexport default PipelineForm;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport { Row, Col } from 'components/bootstrap';\nimport { RelativeTime } from 'components/common';\nimport { MetricContainer, CounterRate } from 'components/metrics';\nimport type { PipelineType } from 'stores/pipelines/PipelinesStore';\n\nimport PipelineForm from './PipelineForm';\n\nconst PipelineDl = styled.dl`\n & {\n margin-bottom: 0;\n margin-top: 10px;\n }\n\n & > dt {\n text-align: left;\n width: 160px;\n }\n\n & > dt::after {\n content: ':';\n }\n\n & > dd {\n margin-left: 120px;\n }\n`;\n\ntype Props = {\n pipeline?: PipelineType,\n create?: boolean,\n onChange: (event) => void,\n onCancel?: () => void,\n};\n\nconst PipelineDetails = ({ pipeline, create, onChange, onCancel }: Props) => {\n if (create) {\n return ;\n }\n\n return (\n
\n \n \n
\n \n
\n

Details

\n \n
Title
\n
{pipeline.title}
\n
Description
\n
{pipeline.description}
\n
Created
\n
\n
Last modified
\n
\n
Current throughput
\n
\n \n \n \n
\n
\n \n
\n
\n
\n );\n};\n\nPipelineDetails.propTypes = {\n pipeline: PropTypes.object,\n create: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onCancel: PropTypes.func,\n};\n\nPipelineDetails.defaultProps = {\n pipeline: undefined,\n create: false,\n onCancel: () => {},\n};\n\nexport default PipelineDetails;\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 PropTypes from 'prop-types';\nimport React, { useMemo, useRef, useState } from 'react';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Link } from 'components/common/router';\nimport { SelectableList } from 'components/common';\nimport { ControlLabel, FormGroup, HelpBlock, Button, BootstrapModalForm } from 'components/bootstrap';\nimport Routes from 'routing/Routes';\nimport type { PipelineType } from 'stores/pipelines/PipelinesStore';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport type { PipelineConnectionsType } from 'stores/pipelines/PipelineConnectionsStore';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport useCurrentUser from 'hooks/useCurrentUser';\n\ntype Props = {\n pipeline: PipelineType,\n connections: PipelineConnectionsType[],\n streams: Stream[],\n save: (newConnection, callback) => void,\n};\n\ntype FormattedStream = {\n value: string,\n label: string,\n}\n\nconst formatStreams = (streams: Stream[]): FormattedStream[] => {\n return streams\n .map((s) => ({ value: s.id, label: s.title }))\n .sort((s1, s2) => naturalSort(s1.label, s2.label));\n};\n\nconst PipelineConnectionsForm = ({ pipeline, connections, streams, save }: Props) => {\n const currentUser = useCurrentUser();\n const modalRef = useRef();\n\n const initialStreamConnections = useMemo(() => {\n return connections\n .filter((c) => c.pipeline_ids && c.pipeline_ids.includes(pipeline.id)) // Get connections for this pipeline\n .filter((c) => streams.some((s) => s.id === c.stream_id)) // Filter out deleted streams\n .map((c) => streams.find((s) => s.id === c.stream_id));\n }, [pipeline, connections, streams]);\n\n const [connectedStreams, setConnectedStreams] = useState(formatStreams(initialStreamConnections));\n\n const notConnectedStreams = useMemo(() => {\n return streams.filter((s) => !connectedStreams.some((cs) => cs.value.toLowerCase() === s.id.toLowerCase()));\n }, [streams, connectedStreams]);\n\n const _openModal = () => {\n if (modalRef.current) {\n modalRef.current.open();\n }\n };\n\n const _onStreamsChange = (newStreams) => {\n setConnectedStreams(newStreams.sort((s1, s2) => naturalSort(s1.label, s2.label)));\n };\n\n const _closeModal = () => {\n if (modalRef.current) {\n modalRef.current.close();\n }\n };\n\n const _save = () => {\n const streamIds = connectedStreams.map((cs) => cs.value);\n const newConnection = {\n pipeline: pipeline.id,\n streams: streamIds,\n };\n\n save(newConnection, _closeModal);\n };\n\n const streamsHelp = (\n \n Select the streams you want to connect to this pipeline, or create one in the{' '}\n Streams page.\n \n );\n\n return (\n \n \n Edit connections for {pipeline.title}}\n onSubmitForm={_save}\n submitButtonText=\"Update connections\">\n
\n \n Streams\n \n {streamsHelp}\n \n
\n
\n \n );\n};\n\nPipelineConnectionsForm.propTypes = {\n pipeline: PropTypes.object.isRequired,\n connections: PropTypes.array.isRequired,\n streams: PropTypes.array.isRequired,\n save: PropTypes.func.isRequired,\n};\n\nexport default PipelineConnectionsForm;\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 PropTypes from 'prop-types';\nimport React, { useCallback, useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport { Row, Col, Alert } from 'components/bootstrap';\nimport { EntityList, Pluralize } from 'components/common';\nimport type { PipelineType, StageType } from 'stores/pipelines/PipelinesStore';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport type { PipelineConnectionsType } from 'stores/pipelines/PipelineConnectionsStore';\n\nimport Stage from './Stage';\nimport StageForm from './StageForm';\nimport PipelineDetails from './PipelineDetails';\nimport PipelineConnectionsForm from './PipelineConnectionsForm';\nimport PipelineConnectionsList from './PipelineConnectionsList';\n\nconst ConnectionWarning = styled(Alert)`\n margin-bottom: 13px;\n`;\n\nconst StyledRow = styled(Row)`\n margin-top: 10px;\n`;\n\nconst StyledP = styled.p`\n margin-top: 5px;\n`;\n\ntype Props = {\n pipeline: PipelineType,\n connections: PipelineConnectionsType[],\n streams: Stream[],\n onConnectionsChange: (updatedConnections, callback?) => void,\n onStagesChange: (newStages: StageType[], callback?) => void,\n onPipelineChange: (pipeline: PipelineType, callback?) => void,\n};\n\nconst Pipeline = ({ pipeline, connections, streams, onConnectionsChange, onStagesChange, onPipelineChange }: Props) => {\n const _connectionsWarning = () => {\n if (connections.length === 0) {\n return (\n \n This pipeline is currently not connected to any streams. You have to connect a pipeline to at least one\n stream to make it process incoming messages. Note that this is not required if you intend to use this\n pipeline only for search result transformation using decorators.\n \n );\n }\n\n return null;\n };\n\n const _saveStage = (stage, callback) => {\n const newStages = pipeline.stages.slice();\n\n newStages.push(stage);\n onStagesChange(newStages, callback);\n };\n\n const _updateStage = useCallback((prevStage) => {\n return (stage, callback) => {\n const newStages = pipeline.stages.filter((s) => s.stage !== prevStage.stage);\n\n newStages.push(stage);\n onStagesChange(newStages, callback);\n };\n }, [pipeline, onStagesChange]);\n\n const _deleteStage = useCallback((stage) => {\n return () => {\n // eslint-disable-next-line no-alert\n if (window.confirm(`You are about to delete stage ${stage.stage}, are you sure you want to proceed?`)) {\n const newStages = pipeline.stages.filter((s) => s.stage !== stage.stage);\n\n onStagesChange(newStages);\n }\n };\n }, [pipeline, onStagesChange]);\n\n const _formatConnectedStreams = (connectedStreams: Stream[]) => {\n const formattedStreams = connectedStreams.map((s) => `\"${s.title}\"`);\n const streamList = formattedStreams.length > 1 ? [formattedStreams.slice(0, -1).join(', '), formattedStreams.slice(-1)].join(' and ') : formattedStreams[0];\n\n return (\n \n This pipeline is processing messages from the{' '}\n {' '}\n {streamList}.\n \n );\n };\n\n const formattedStages = useMemo(() => {\n const maxStage = pipeline.stages.reduce((max, currentStage) => Math.max(max, currentStage.stage), -Infinity);\n\n return pipeline.stages\n .sort((s1, s2) => s1.stage - s2.stage)\n .map((stage) => (\n \n ));\n }, [pipeline, _updateStage, _deleteStage]);\n\n const stageKey = useMemo(() => {\n return pipeline.stages.map((s) => s.stage).join('-');\n }, [pipeline.stages]);\n\n return (\n
\n {_connectionsWarning()}\n \n \n \n
\n \n
\n

Pipeline connections

\n \n \n \n
\n \n
\n \n \n
\n \n
\n

Pipeline Stages

\n \n Stages are groups of conditions and actions which need to run in order, and provide the necessary{' '}\n control flow to decide whether or not to run the rest of a pipeline.\n \n \n
\n \n
\n );\n};\n\nPipeline.propTypes = {\n pipeline: PropTypes.object.isRequired,\n connections: PropTypes.array.isRequired,\n streams: PropTypes.array.isRequired,\n onConnectionsChange: PropTypes.func.isRequired,\n onStagesChange: PropTypes.func.isRequired,\n onPipelineChange: PropTypes.func.isRequired,\n};\n\nexport default Pipeline;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Row, Col } from 'components/bootstrap';\nimport history from 'util/History';\nimport Routes from 'routing/Routes';\nimport type { PipelineType } from 'stores/pipelines/PipelinesStore';\n\nimport PipelineDetails from './PipelineDetails';\n\ntype Props = {\n onChange: (pipeline: PipelineType, callback?: (pipeline: PipelineType) => void) => void;\n};\n\nconst NewPipeline = ({ onChange }: Props) => {\n const _goToPipeline = (pipeline) => {\n history.push(Routes.SYSTEM.PIPELINES.PIPELINE(pipeline.id));\n };\n\n const _goBack = () => {\n history.goBack();\n };\n\n const _onChange = (newPipeline) => {\n onChange(newPipeline, _goToPipeline);\n };\n\n return (\n \n \n

\n Give a name and description to the new pipeline. You can add stages to it when you save the changes.\n

\n \n \n
\n );\n};\n\nNewPipeline.propTypes = {\n onChange: PropTypes.func.isRequired,\n};\n\nexport default NewPipeline;\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 SourceGenerator = {\n generatePipeline(pipeline) {\n let source = `pipeline \"${pipeline.title}\"\\n`;\n\n pipeline.stages.forEach((stage) => {\n source += `stage ${stage.stage} match ${stage.match?.toLowerCase() || 'either'}\\n`;\n\n stage.rules.forEach((rule) => {\n source += `rule \"${rule}\"\\n`;\n });\n });\n\n source += 'end';\n\n return source;\n },\n};\n\nexport default SourceGenerator;\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 PropTypes from 'prop-types';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Col, Row } from 'components/bootstrap';\nimport { DocumentTitle, PageHeader, Spinner } from 'components/common';\nimport Pipeline from 'components/pipelines/Pipeline';\nimport NewPipeline from 'components/pipelines/NewPipeline';\nimport SourceGenerator from 'logic/pipelines/SourceGenerator';\nimport ObjectUtils from 'util/ObjectUtils';\nimport withParams from 'routing/withParams';\nimport { StreamsStore } from 'stores/streams/StreamsStore';\nimport { PipelineConnectionsStore, PipelineConnectionsActions } from 'stores/pipelines/PipelineConnectionsStore';\nimport { PipelinesStore, PipelinesActions } from 'stores/pipelines/PipelinesStore';\nimport { RulesStore } from 'stores/rules/RulesStore';\nimport DocsHelper from 'util/DocsHelper';\n\nimport PipelinesPageNavigation from '../components/pipelines/PipelinesPageNavigation';\n\nfunction filterPipeline(state) {\n return state.pipelines ? state.pipelines.filter((p) => p.id === this.props.params.pipelineId)[0] : undefined;\n}\n\nfunction filterConnections(state) {\n if (!state.connections) {\n return undefined;\n }\n\n return state.connections.filter((c) => c.pipeline_ids && c.pipeline_ids.includes(this.props.params.pipelineId));\n}\n\nconst PipelineDetailsPage = createReactClass({\n // eslint-disable-next-line react/no-unused-class-component-methods\n displayName: 'PipelineDetailsPage',\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n propTypes: {\n params: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connectFilter(PipelinesStore, 'pipeline', filterPipeline), Reflux.connectFilter(PipelineConnectionsStore, 'connections', filterConnections)],\n\n componentDidMount() {\n const { params } = this.props;\n\n if (!this._isNewPipeline(params.pipelineId)) {\n PipelinesActions.get(params.pipelineId);\n }\n\n RulesStore.list();\n PipelineConnectionsActions.list();\n\n StreamsStore.listStreams().then((streams) => {\n const filteredStreams = streams.filter((s) => s.is_editable);\n\n this.setState({ streams: filteredStreams });\n });\n },\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!this._isNewPipeline(nextProps.params.pipelineId)) {\n PipelinesActions.get(nextProps.params.pipelineId);\n }\n },\n\n _onConnectionsChange(updatedConnections, callback) {\n PipelineConnectionsActions.connectToPipeline(updatedConnections);\n callback();\n },\n\n _onStagesChange(newStages, callback) {\n const { pipeline } = this.state;\n const newPipeline = ObjectUtils.clone(pipeline);\n\n newPipeline.stages = newStages;\n newPipeline.source = SourceGenerator.generatePipeline(newPipeline);\n PipelinesActions.update(newPipeline);\n\n if (typeof callback === 'function') {\n callback();\n }\n },\n\n _savePipeline(pipeline, callback) {\n const requestPipeline = ObjectUtils.clone(pipeline);\n\n requestPipeline.source = SourceGenerator.generatePipeline(pipeline);\n let promise;\n\n if (requestPipeline.id) {\n promise = PipelinesActions.update(requestPipeline);\n } else {\n promise = PipelinesActions.save(requestPipeline);\n }\n\n promise.then((p) => callback(p));\n },\n\n _isNewPipeline(pipelineId) {\n return pipelineId === 'new';\n },\n\n _isLoading() {\n const { params } = this.props;\n const { connections, streams, pipeline } = this.state;\n\n return !this._isNewPipeline(params.pipelineId) && (!pipeline || !connections || !streams);\n },\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n const { params } = this.props;\n const { connections, streams, pipeline, rules } = this.state;\n\n let title;\n\n if (this._isNewPipeline(params.pipelineId)) {\n title = 'New pipeline';\n } else {\n title = Pipeline {pipeline.title};\n }\n\n let content;\n\n if (this._isNewPipeline(params.pipelineId)) {\n content = ;\n } else {\n content = (\n \n );\n }\n\n const pageTitle = (this._isNewPipeline(params.pipelineId) ? 'New pipeline' : `Pipeline ${pipeline.title}`);\n\n return (\n \n
\n \n \n \n Pipelines let you transform and process messages coming from streams. Pipelines consist of stages where\n rules are evaluated and applied. Messages can go through one or more stages.\n
\n After each stage is completed, you can decide if messages matching all or one of the rules continue to\n the next stage.\n
\n
\n\n \n \n {content}\n \n \n
\n
\n );\n },\n});\n\nexport default withParams(PipelineDetailsPage);\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 UserNotification from 'util/UserNotification';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport { qualifyUrl } from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\ntype PipelineConnectionsActionsType = {\n list: () => Promise,\n connectToStream: () => Promise,\n connectToPipeline: () => Promise,\n}\nexport const PipelineConnectionsActions = singletonActions(\n 'core.PipelineConnections',\n () => Reflux.createActions({\n list: { asyncResult: true },\n connectToStream: { asyncResult: true },\n connectToPipeline: { asyncResult: true },\n }),\n);\n\nexport type PipelineConnectionsType = {\n id?: string,\n stream_id: string,\n pipeline_ids: string[],\n};\n\ntype PipelineReverseConnectionsType = {\n pipeline_id: string,\n stream_ids: string[],\n};\n\ntype PipelineConnectionsStoreState = {\n connections: any,\n}\nexport const PipelineConnectionsStore = singletonStore(\n 'core.PipelineConnections',\n () => Reflux.createStore({\n listenables: [PipelineConnectionsActions],\n connections: undefined,\n\n getInitialState() {\n return { connections: this.connections };\n },\n\n list() {\n const failCallback = (error) => {\n UserNotification.error(`Fetching pipeline connections failed with status: ${error.message}`,\n 'Could not retrieve pipeline connections');\n };\n\n const url = qualifyUrl(ApiRoutes.ConnectionsController.list().url);\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.connections = response;\n this.trigger({ connections: response });\n }, failCallback);\n },\n\n connectToStream(connection) {\n const url = qualifyUrl(ApiRoutes.ConnectionsController.to_stream().url);\n const updatedConnection: PipelineConnectionsType = {\n stream_id: connection.stream,\n pipeline_ids: connection.pipelines,\n };\n const promise = fetch('POST', url, updatedConnection);\n\n promise.then(\n (response) => {\n if (this.connections.filter((c) => c.stream_id === response.stream_id)[0]) {\n this.connections = this.connections.map((c) => (c.stream_id === response.stream_id ? response : c));\n } else {\n this.connections.push(response);\n }\n\n this.trigger({ connections: this.connections });\n UserNotification.success('Pipeline connections updated successfully');\n },\n this._failUpdateCallback,\n );\n },\n\n connectToPipeline(reverseConnection) {\n const url = qualifyUrl(ApiRoutes.ConnectionsController.to_pipeline().url);\n const updatedConnection: PipelineReverseConnectionsType = {\n pipeline_id: reverseConnection.pipeline,\n stream_ids: reverseConnection.streams,\n };\n const promise = fetch('POST', url, updatedConnection);\n\n promise.then(\n (response) => {\n response.forEach((connection) => {\n if (this.connections.filter((c) => c.stream_id === connection.stream_id)[0]) {\n this.connections = this.connections.map((c) => (c.stream_id === connection.stream_id ? connection : c));\n } else {\n this.connections.push(connection);\n }\n });\n\n this.trigger({ connections: this.connections });\n UserNotification.success('Pipeline connections updated successfully');\n },\n this._failUpdateCallback,\n );\n },\n\n _failUpdateCallback(error) {\n UserNotification.error(`Updating pipeline connections failed with status: ${error.message}`,\n 'Could not update pipeline connections');\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 Reflux from 'reflux';\nimport Immutable from 'immutable';\n\nimport UserNotification from 'util/UserNotification';\nimport { qualifyUrl } from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport fetch from 'logic/rest/FetchProvider';\nimport type { PaginatedList, PaginatedListJSON, Pagination } from 'stores/PaginationTypes';\nimport PaginationURL from 'util/PaginationURL';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\ntype PipelinesActionsType = {\n delete: (id: string) => Promise,\n list: () => Promise,\n listPaginated: (pagination: Pagination) => Promise,\n get: () => Promise,\n save: () => Promise,\n update: () => Promise,\n parse: () => Promise,\n}\nexport const PipelinesActions = singletonActions(\n 'core.Pipelines',\n () => Reflux.createActions({\n delete: { asyncResult: true },\n list: { asyncResult: true },\n listPaginated: { asyncResult: true },\n get: { asyncResult: true },\n save: { asyncResult: true },\n update: { asyncResult: true },\n parse: { asyncResult: true },\n }),\n);\n\nexport type PipelineType = {\n id: string,\n title: string,\n description: string,\n source: string,\n created_at: string,\n modified_at: string,\n stages: StageType[],\n errors?: [],\n};\n\nexport type StageType = {\n stage: number,\n match: string,\n rules: [string],\n};\n\nexport type PaginatedPipelineResponse = PaginatedListJSON & {\n pipelines: Array,\n};\n\nexport type PaginatedPipelines = PaginatedList;\n\nconst listFailCallback = (error) => {\n UserNotification.error(`Fetching pipelines failed with status: ${error.message}`,\n 'Could not retrieve processing pipelines');\n};\n\nexport const PipelinesStore = singletonStore(\n 'core.Pipelines',\n () => Reflux.createStore({\n listenables: [PipelinesActions],\n pipelines: undefined,\n\n getInitialState() {\n return { pipelines: this.pipelines };\n },\n\n _updatePipelinesState(pipeline: PipelineType) {\n if (!this.pipelines) {\n this.pipelines = [pipeline];\n } else {\n const doesPipelineExist = this.pipelines.some((p) => p.id === pipeline.id);\n\n if (doesPipelineExist) {\n this.pipelines = this.pipelines.map((p) => (p.id === pipeline.id ? pipeline : p));\n } else {\n this.pipelines.push(pipeline);\n }\n }\n\n this.trigger({ pipelines: this.pipelines });\n },\n\n list() {\n const url = qualifyUrl(ApiRoutes.PipelinesController.list().url);\n\n return fetch('GET', url).then((response) => {\n this.pipelines = response;\n this.trigger({ pipelines: response });\n }, listFailCallback);\n },\n\n listPaginated({\n page,\n perPage,\n query,\n }: Pagination): Promise {\n const url = PaginationURL(ApiRoutes.PipelinesController.paginatedList().url, page, perPage, query);\n\n const promise = fetch('GET', qualifyUrl(url)).then((response: PaginatedPipelineResponse) => ({\n list: Immutable.List(response.pipelines),\n pagination: {\n page: response.page,\n perPage: response.per_page,\n query: response.query,\n count: response.count,\n total: response.total,\n },\n }), listFailCallback);\n\n PipelinesActions.listPaginated.promise(promise);\n\n return promise;\n },\n\n get(pipelineId) {\n const failCallback = (error) => {\n UserNotification.error(`Fetching pipeline failed with status: ${error.message}`,\n `Could not retrieve processing pipeline \"${pipelineId}\"`);\n };\n\n const url = qualifyUrl(ApiRoutes.PipelinesController.get(pipelineId).url);\n const promise = fetch('GET', url);\n\n promise.then(this._updatePipelinesState, failCallback);\n },\n\n save(pipelineSource) {\n const failCallback = (error) => {\n UserNotification.error(`Saving pipeline failed with status: ${error.message}`,\n 'Could not save processing pipeline');\n };\n\n const url = qualifyUrl(ApiRoutes.PipelinesController.create().url);\n const pipeline = {\n title: pipelineSource.title,\n description: pipelineSource.description,\n source: pipelineSource.source,\n };\n const promise = fetch('POST', url, pipeline);\n\n promise.then(\n (response) => {\n this._updatePipelinesState(response);\n UserNotification.success(`Pipeline \"${pipeline.title}\" created successfully`);\n },\n failCallback,\n );\n\n PipelinesActions.save.promise(promise);\n },\n\n update(pipelineSource) {\n const failCallback = (error) => {\n UserNotification.error(`Updating pipeline failed with status: ${error.message}`,\n 'Could not update processing pipeline');\n };\n\n const url = qualifyUrl(ApiRoutes.PipelinesController.update(pipelineSource.id).url);\n const pipeline = {\n id: pipelineSource.id,\n title: pipelineSource.title,\n description: pipelineSource.description,\n source: pipelineSource.source,\n };\n const promise = fetch('PUT', url, pipeline);\n\n promise.then(\n (response) => {\n this._updatePipelinesState(response);\n UserNotification.success(`Pipeline \"${pipeline.title}\" updated successfully`);\n },\n failCallback,\n );\n\n PipelinesActions.update.promise(promise);\n },\n delete(pipelineId) {\n const failCallback = (error) => {\n UserNotification.error(`Deleting pipeline failed with status: ${error.message}`,\n `Could not delete processing pipeline \"${pipelineId}\"`);\n };\n\n const url = qualifyUrl(ApiRoutes.PipelinesController.delete(pipelineId).url);\n\n const promise = fetch('DELETE', url).then(() => {\n const updatedPipelines = this.pipelines || [];\n\n this.pipelines = updatedPipelines.filter((el) => el.id !== pipelineId);\n this.trigger({ pipelines: this.pipelines });\n UserNotification.success(`Pipeline \"${pipelineId}\" deleted successfully`);\n }, failCallback);\n\n PipelinesActions.delete.promise(promise);\n\n return promise;\n },\n parse(pipelineSource, callback) {\n const url = qualifyUrl(ApiRoutes.PipelinesController.parse().url);\n const pipeline = {\n title: pipelineSource.title,\n description: pipelineSource.description,\n source: pipelineSource.source,\n };\n\n return fetch('POST', url, pipeline).then(\n () => {\n // call to clear the errors, the parsing was successful\n callback([]);\n },\n (error) => {\n // a Bad Request indicates a parse error, set all the returned errors in the editor\n if (error.status === 400) {\n callback(error.additional.body);\n }\n },\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 */\nimport Reflux from 'reflux';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport UserNotification from 'util/UserNotification';\nimport { qualifyUrl } from 'util/URLUtils';\nimport PaginationURL from 'util/PaginationURL';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\nimport type { Pagination, PaginatedListJSON, ListPagination } from 'stores/PaginationTypes';\n\nexport type RuleType = {\n id?: string,\n source: string,\n title: string,\n description: string,\n created_at: string,\n modified_at: string,\n errors?: [],\n};\nexport type MetricsConfigType = {\n metrics_enabled: boolean,\n};\nexport type PipelineSummary = {\n id: string,\n title: string,\n};\nexport type RulesContext = {\n used_in_pipelines: {\n [id: string]: Array,\n }\n};\nexport type PaginatedRulesResponse = PaginatedListJSON & {\n rules: Array,\n context: RulesContext,\n};\n\nexport type PaginatedRules = {\n list: Array,\n context: RulesContext,\n pagination: ListPagination,\n};\n\nexport type RulesStoreState = {\n rules: Array,\n rulesContext: RulesContext,\n functionDescriptors: any,\n metricsConfig: MetricsConfigType | undefined,\n};\n\ntype RulesActionsType = {\n delete: (rule: RuleType) => Promise,\n list: () => Promise,\n get: () => Promise,\n save: (rule: RuleType) => Promise,\n update: (rule: RuleType) => Promise,\n parse: (rule: RuleType, callback: () => void) => Promise,\n multiple: () => Promise,\n loadFunctions: () => Promise,\n loadMetricsConfig: () => Promise,\n updateMetricsConfig: () => Promise,\n listPaginated: (pagination: Pagination) => Promise,\n};\n\nexport const RulesActions = singletonActions(\n 'core.Rules',\n () => Reflux.createActions({\n delete: { asyncResult: true },\n list: { asyncResult: true },\n get: { asyncResult: true },\n save: { asyncResult: true },\n update: { asyncResult: true },\n parse: { asyncResult: true },\n multiple: { asyncResult: true },\n loadFunctions: { asyncResult: true },\n loadMetricsConfig: { asyncResult: true },\n updateMetricsConfig: { asyncResult: true },\n listPaginated: { asyncResult: true },\n }),\n);\n\nexport const RulesStore = singletonStore(\n 'core.Rules',\n () => Reflux.createStore<{ rules: RuleType[] }>({\n listenables: [RulesActions],\n rules: undefined,\n rulesContext: undefined,\n functionDescriptors: undefined,\n metricsConfig: undefined,\n\n getInitialState() {\n return {\n rules: this.rules,\n rulesContext: this.rulesContext,\n functionDescriptors: this.functionDescriptors,\n metricsConfig: this.metricsConfig,\n };\n },\n\n _updateRulesState(rule) {\n if (!this.rules) {\n this.rules = [rule];\n } else {\n const doesRuleExist = this.rules.some((r) => r.id === rule.id);\n\n if (doesRuleExist) {\n this.rules = this.rules.map((r) => (r.id === rule.id ? rule : r));\n } else {\n this.rules.push(rule);\n }\n }\n\n this.trigger({ rules: this.rules, functionDescriptors: this.functionDescriptors });\n },\n\n _updateFunctionDescriptors(functions) {\n if (functions) {\n this.functionDescriptors = functions.sort((fn1, fn2) => naturalSort(fn1.name, fn2.name));\n }\n\n this.trigger({ rules: this.rules, functionDescriptors: this.functionDescriptors });\n },\n\n list() {\n const failCallback = (error) => {\n UserNotification.error(`Fetching rules failed with status: ${error.message}`,\n 'Could not retrieve processing rules');\n };\n\n const url = qualifyUrl(ApiRoutes.RulesController.list().url);\n\n return fetch('GET', url).then((response) => {\n this.rules = response;\n this.trigger({ rules: response, functionDescriptors: this.functionDescriptors });\n }, failCallback);\n },\n\n listPaginated({ page, perPage, query }: Pagination): Promise {\n const url = PaginationURL(ApiRoutes.RulesController.paginatedList().url, page, perPage, query);\n const promise = fetch('GET', qualifyUrl(url))\n .then((response: PaginatedRulesResponse) => ({\n list: response.rules,\n context: response.context,\n pagination: {\n count: response.count,\n total: response.total,\n page: response.page,\n perPage: response.per_page,\n query: response.query,\n },\n }),\n (error) => {\n if (!error.additional || error.additional.status !== 404) {\n UserNotification.error(`Loading rules list failed with status: ${error}`, 'Could not load rules.');\n }\n });\n\n RulesActions.listPaginated.promise(promise);\n\n return promise;\n },\n\n get(ruleId) {\n const failCallback = (error) => {\n UserNotification.error(`Fetching rule \"${ruleId}\" failed with status: ${error.message}`,\n `Could not retrieve processing rule \"${ruleId}\"`);\n };\n\n const url = qualifyUrl(ApiRoutes.RulesController.get(ruleId).url);\n const promise = fetch('GET', url);\n\n promise.then(this._updateRulesState, failCallback);\n RulesActions.get.promise(promise);\n\n return promise;\n },\n\n save(ruleSource: RuleType) {\n const failCallback = (error) => {\n UserNotification.error(`Saving rule \"${ruleSource.title}\" failed with status: ${error.message}`,\n `Could not save processing rule \"${ruleSource.title}\"`);\n };\n\n const url = qualifyUrl(ApiRoutes.RulesController.create().url);\n const rule = {\n title: ruleSource.title,\n description: ruleSource.description,\n source: ruleSource.source,\n };\n const promise = fetch('POST', url, rule);\n\n promise.then((response) => {\n this._updateRulesState(response);\n UserNotification.success(`Rule \"${response.title}\" created successfully`);\n\n return response;\n }, failCallback);\n\n RulesActions.save.promise(promise);\n\n return promise;\n },\n\n update(ruleSource: RuleType) {\n const failCallback = (error) => {\n UserNotification.error(`Updating rule \"${ruleSource.title}\" failed with status: ${error.message}`,\n `Could not update processing rule \"${ruleSource.title}\"`);\n };\n\n const url = qualifyUrl(ApiRoutes.RulesController.update(ruleSource.id).url);\n const rule = {\n id: ruleSource.id,\n title: ruleSource.title,\n description: ruleSource.description,\n source: ruleSource.source,\n };\n const promise = fetch('PUT', url, rule);\n\n promise.then((response) => {\n this._updateRulesState(response);\n UserNotification.success(`Rule \"${response.title}\" updated successfully`);\n\n return response;\n }, failCallback);\n\n RulesActions.update.promise(promise);\n\n return promise;\n },\n delete(rule) {\n const failCallback = (error) => {\n UserNotification.error(`Deleting rule \"${rule.title}\" failed with status: ${error.message}`,\n `Could not delete processing rule \"${rule.title}\"`);\n };\n\n const url = qualifyUrl(ApiRoutes.RulesController.delete(rule.id).url);\n\n const promise = fetch('DELETE', url).then(() => {\n this.rules = this.rules.filter((el) => el.id !== rule.id);\n this.trigger({ rules: this.rules, functionDescriptors: this.functionDescriptors });\n UserNotification.success(`Rule \"${rule.title}\" was deleted successfully`);\n }, failCallback);\n\n RulesActions.delete.promise(promise);\n\n return promise;\n },\n parse(ruleSource, callback) {\n const url = qualifyUrl(ApiRoutes.RulesController.parse().url);\n const rule = {\n title: ruleSource.title,\n description: ruleSource.description,\n source: ruleSource.source,\n };\n\n return fetch('POST', url, rule).then(\n (response) => {\n // call to clear the errors, the parsing was successful\n callback([]);\n\n return response;\n },\n (error) => {\n // a Bad Request indicates a parse error, set all the returned errors in the editor\n if (error.status === 400) {\n callback(error.additional.body);\n }\n },\n );\n },\n multiple(ruleNames, callback) {\n const url = qualifyUrl(ApiRoutes.RulesController.multiple().url);\n const promise = fetch('POST', url, { rules: ruleNames });\n\n promise.then(callback);\n\n return promise;\n },\n loadFunctions() {\n if (this.functionDescriptors) {\n return undefined;\n }\n\n const url = qualifyUrl(ApiRoutes.RulesController.functions().url);\n\n return fetch('GET', url)\n .then(this._updateFunctionDescriptors);\n },\n loadMetricsConfig() {\n const url = qualifyUrl(ApiRoutes.RulesController.metricsConfig().url);\n const promise = fetch('GET', url);\n\n promise.then(\n (response: MetricsConfigType) => {\n this.metricsConfig = response;\n this.trigger({ rules: this.rules, functionDescriptors: this.functionDescriptors, metricsConfig: this.metricsConfig });\n },\n (error) => {\n UserNotification.error(`Couldn't load rule metrics config: ${error.message}`, \"Couldn't load rule metrics config\");\n },\n );\n\n RulesActions.loadMetricsConfig.promise(promise);\n },\n updateMetricsConfig(nextConfig) {\n const url = qualifyUrl(ApiRoutes.RulesController.metricsConfig().url);\n const promise = fetch('PUT', url, nextConfig);\n\n promise.then(\n (response) => {\n this.metricsConfig = response;\n this.trigger({ rules: this.rules, functionDescriptors: this.functionDescriptors, metricsConfig: this.metricsConfig });\n UserNotification.success('Successfully updated rule metrics config');\n },\n (error) => {\n UserNotification.error(`Couldn't update rule metrics config: ${error.message}`, \"Couldn't update rule metrics config\");\n },\n );\n\n RulesActions.updateMetricsConfig.promise(promise);\n },\n }),\n);\n"],"names":["Container","styled","ButtonToolbar","StyledButton","Button","theme","css","fonts","family","navigation","size","colors","variant","darker","default","hoverIndicatorStyles","global","textDefault","activeIndicatorStyles","displayName","items","map","path","title","permissions","exactPathMatch","key","to","relativeActive","bsStyle","PipelineConnectionsList","pipeline","connections","streams","streamsFormatter","noConnectionsMessage","streamsUsingPipeline","filter","c","pipeline_ids","includes","id","some","s","stream_id","find","sort","s1","s2","naturalSort","length","propTypes","PropTypes","defaultProps","NAV_ITEMS","Routes","StageForm","stage","create","save","currentUser","useCurrentUser","modalRef","useRef","_initialStageNumber","useMemo","Math","max","stages","nextStage","setNextStage","useState","rules","useStore","RulesStore","_onChange","target","currentStage","name","getValueFromInput","_onSaved","current","close","isOverridingStage","_formatRuleOption","value","label","_getFormattedOptions","useCallback","chosenRules","rule","_filterChosenRules","rulesHelp","disabled","isPermitted","onClick","open","ref","onSubmitForm","submitButtonText","type","autoFocus","min","NumberUtils","onChange","help","checked","match","options","isLoading","newRules","selectedOptions","TitleTd","StageRules","className","headers","headerCellFormatter","header","rows","dataRowFormatter","ruleArg","ruleIdx","ruleTitle","description","zeroOnMissing","suffix","showTotal","noDataText","filterLabel","filterKeys","Stage","isLastStage","onUpdate","onDelete","allRules","throughput","prefix","actions","matchText","block","content","r","titleSuffix","contentRow","md","PipelineForm","modal","onCancel","nextPipeline","setNextPipeline","cloneDeep","_openModal","currentPipeline","_handleSubmit","event","preventDefault","required","onSubmit","undefined","PipelineDl","PipelineDetails","dateTime","created_at","modified_at","formatStreams","PipelineConnectionsForm","initialStreamConnections","connectedStreams","setConnectedStreams","notConnectedStreams","cs","toLowerCase","_closeModal","streamsHelp","streamIds","newConnection","newStreams","selectedOptionsType","ConnectionWarning","Alert","StyledRow","Row","StyledP","Pipeline","onConnectionsChange","onStagesChange","onPipelineChange","_updateStage","prevStage","callback","newStages","push","_deleteStage","window","confirm","formattedStages","maxStage","reduce","Infinity","stageKey","join","formattedStreams","streamList","slice","singular","plural","bsNoItemsStyle","noItemsText","NewPipeline","_goToPipeline","history","newPipeline","generatePipeline","source","forEach","PipelineDetailsPage","createReactClass","params","mixins","Reflux","PipelinesStore","state","pipelines","p","this","props","pipelineId","PipelineConnectionsStore","componentDidMount","_isNewPipeline","PipelinesActions","PipelineConnectionsActions","StreamsStore","then","filteredStreams","is_editable","setState","UNSAFE_componentWillReceiveProps","nextProps","_onConnectionsChange","updatedConnections","_onStagesChange","ObjectUtils","SourceGenerator","_savePipeline","requestPipeline","promise","_isLoading","render","pageTitle","PipelinesPageNavigation","documentationLink","DocsHelper","withParams","singletonActions","list","asyncResult","connectToStream","connectToPipeline","singletonStore","listenables","getInitialState","url","qualifyUrl","ApiRoutes","fetch","response","trigger","error","UserNotification","message","connection","updatedConnection","stream","_failUpdateCallback","reverseConnection","pipeline_id","stream_ids","delete","listPaginated","get","update","parse","listFailCallback","_updatePipelinesState","page","perPage","query","PaginationURL","Immutable","pagination","per_page","count","total","pipelineSource","updatedPipelines","el","status","additional","body","RulesActions","multiple","loadFunctions","loadMetricsConfig","updateMetricsConfig","rulesContext","functionDescriptors","metricsConfig","_updateRulesState","_updateFunctionDescriptors","functions","fn1","fn2","context","ruleId","ruleSource","ruleNames","nextConfig"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy