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

web-interface.assets.1255d548-7466.83a666d83924acd3032d.js.map Maven / Gradle / Ivy

There is a newer version: 6.1.4
Show newest version
{"version":3,"file":"1255d548-7466.83a666d83924acd3032d.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/common/PageNavigation.tsx","webpack://graylog-web-interface/./src/components/pipelines/PipelinesPageNavigation.tsx","webpack://graylog-web-interface/./src/components/rules/RuleListEntry.tsx","webpack://graylog-web-interface/./src/components/rules/RuleList.tsx","webpack://graylog-web-interface/./src/components/rules/RuleMetricsConfig.jsx","webpack://graylog-web-interface/./src/components/rules/RuleMetricsConfigContainer.jsx","webpack://graylog-web-interface/./src/pages/RulesPage.tsx","webpack://graylog-web-interface/./src/stores/PaginationTypes.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,\n    &:focus {\n      text-decoration: none;\n    }\n\n    > div {\n      &:hover,\n      &:focus {\n        color: ${theme.colors.variant.darker.default};\n      }\n    }\n\n    &:hover {\n      ${hoverIndicatorStyles(theme)}\n    }\n\n    &.active {\n      color: ${theme.colors.global.textDefault};\n\n      ${activeIndicatorStyles(theme)}\n\n      &:hover,\n      &: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 * 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 * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { LinkContainer, Link } from 'components/common/router';\nimport { MetricContainer, CounterRate } from 'components/metrics';\nimport { RelativeTime, OverlayTrigger, CountBadge } from 'components/common';\nimport { Button, ButtonToolbar, Tooltip } from 'components/bootstrap';\nimport Routes from 'routing/Routes';\nimport type { RuleType, PipelineSummary } from 'stores/rules/RulesStore';\nimport StringUtils from 'util/StringUtils';\n\ntype Props = {\n  rule: RuleType,\n  usingPipelines: Array\n  onDelete: (rule: RuleType) => () => void,\n}\nconst STRING_SIZE_LIMIT = 30;\n\nconst LimitedTd = styled.td(({ theme }) => css`\n  max-width: 250px;\n  min-width: 250px;\n  \n  @media screen and (max-width: ${theme.breakpoints.max.md}) {\n    white-space: normal !important;\n  }\n`);\n\nconst RuleListEntry = ({ rule, onDelete, usingPipelines }: Props) => {\n  const { id, title, description, created_at, modified_at } = rule;\n  const pipelinesLength = usingPipelines.length;\n  const isRuleBuilder = rule.rule_builder ? '?rule_builder=true' : '';\n  const actions = (\n    \n      \n        \n      \n      \n    \n  );\n\n  const _showPipelines = (pipelines: Array) => pipelines.map(({ id: pipelineId, title: pipelineTitle }, index) => {\n    const tooltip = {pipelineTitle};\n\n    return (\n      \n        {pipelineTitle.length > STRING_SIZE_LIMIT ? (\n          \n            \n              {StringUtils.truncateWithEllipses(pipelineTitle, STRING_SIZE_LIMIT)}\n            \n          \n        ) : (\n          \n            {pipelineTitle}\n          \n        )}\n        {index < (pipelinesLength - 1) && ',  '}\n      \n    );\n  });\n\n  return (\n    \n      \n        \n          {title}\n        \n      \n      {description}\n      \n      \n      \n        \n          \n        \n      \n      \n        \n          \n        \n      \n      \n        {pipelinesLength}\n        {' '}\n        {_showPipelines(usingPipelines)}\n      \n      {actions}\n    \n  );\n};\n\nexport default RuleListEntry;\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 { DataTable } from 'components/common';\nimport type { RuleType, MetricsConfigType, RulesContext } from 'stores/rules/RulesStore';\n\nimport RuleListEntry from './RuleListEntry';\n\ntype Props = {\n  rules: Array,\n  metricsConfig?: MetricsConfigType,\n  rulesContext?: RulesContext,\n  onDelete: (RuleType) => () => void,\n  searchFilter: React.ReactNode,\n};\n\ntype State = {\n  openMetricsConfig: boolean,\n};\n\nclass RuleList extends React.Component {\n  static propTypes = {\n    rules: PropTypes.array.isRequired,\n\n    rulesContext: PropTypes.exact({\n      used_in_pipelines: PropTypes.objectOf(PropTypes.any),\n    }),\n    onDelete: PropTypes.func.isRequired,\n    searchFilter: PropTypes.node.isRequired,\n  };\n\n  static defaultProps = {\n    rulesContext: undefined,\n  };\n\n  _headerCellFormatter = (header) => {header};\n\n  _ruleInfoFormatter = (rule) => {\n    const { onDelete, rulesContext: { used_in_pipelines: usingPipelines } = {} } = this.props;\n\n    return ;\n  };\n\n  render() {\n    const { rules, searchFilter } = this.props;\n    const headers = ['Title', 'Description', 'Created', 'Last modified', 'Throughput', 'Errors', 'Pipelines', 'Actions'];\n\n    return (\n      \n    );\n  }\n}\n\nexport default RuleList;\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 { Spinner } from 'components/common';\nimport { Alert, BootstrapModalForm, Input } from 'components/bootstrap';\nimport * as FormsUtils from 'util/FormsUtils';\n\nexport default class RuleMetricsConfig extends React.Component {\n  static propTypes = {\n    config: PropTypes.object,\n    onChange: PropTypes.func.isRequired,\n    onClose: PropTypes.func,\n  };\n\n  static defaultProps = {\n    config: undefined,\n    onClose: () => {},\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      nextConfig: props.config,\n    };\n  }\n\n  saveConfiguration = () => {\n    const { onChange } = this.props;\n    const { nextConfig } = this.state;\n\n    onChange(nextConfig).then(this.closeModal);\n  };\n\n  closeModal = () => {\n    this.props.onClose();\n  };\n\n  propagateChange = (key, value) => {\n    const { config } = this.props;\n    const nextConfig = cloneDeep(config);\n\n    nextConfig[key] = value;\n    this.setState({ nextConfig });\n  };\n\n  handleChange = (event) => {\n    const { name } = event.target;\n\n    this.propagateChange(name, FormsUtils.getValueFromInput(event.target));\n  };\n\n  render() {\n    const { config } = this.props;\n    const { nextConfig } = this.state;\n\n    if (!config) {\n      return 

;\n }\n\n return (\n \n \n Rule metrics should only be enabled to debug a performance issue because collecting the\n metrics will slow down message processing and increase memory usage.\n \n
\n \n\n \n
\n

\n When enabled the system metrics will update two timers for every rule execution.\n

\n Rule evaluation timer\n

\n This timer measures the duration for the rule condition. (everything inside the when statement)\n

\n

\n Example metric name with rule ID placeholder:
\n org.graylog.plugins.pipelineprocessor.ast.Rule.[rule-id].trace.evaluate.duration
\n Example metric name with rule ID, pipeline ID and stage number placeholders:
\n org.graylog.plugins.pipelineprocessor.ast.Rule.[rule-id].[pipeline-id].[stage-num].trace.evaluate.duration\n

\n Rule execution timer\n

\n This timer measures the duration for the rule execution. (everything inside the then statement)\n

\n

\n Example metric name with rule ID placeholder:
\n org.graylog.plugins.pipelineprocessor.ast.Rule.[rule-id].trace.execute.duration
\n Example metric name with rule ID, pipeline ID and stage number placeholders:
\n org.graylog.plugins.pipelineprocessor.ast.Rule.[rule-id].[pipeline-id].[stage-num].trace.execute.duration\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 React from 'react';\nimport PropTypes from 'prop-types';\n\nimport connect from 'stores/connect';\nimport { RulesActions, RulesStore } from 'stores/rules/RulesStore';\n\nimport RuleMetricsConfig from './RuleMetricsConfig';\n\nconst handleChange = (nextConfig) => RulesActions.updateMetricsConfig(nextConfig);\n\nclass RuleMetricsConfigContainer extends React.Component {\n static propTypes = {\n metricsConfig: PropTypes.object,\n onClose: PropTypes.func,\n };\n\n static defaultProps = {\n metricsConfig: undefined,\n onClose: () => {},\n };\n\n componentDidMount() {\n RulesActions.loadMetricsConfig();\n }\n\n render() {\n const { metricsConfig, onClose } = this.props;\n\n if (!metricsConfig) {\n return null;\n }\n\n return (\n \n );\n }\n}\n\nexport default connect(RuleMetricsConfigContainer, { rules: RulesStore }, ({ rules }) => ({ metricsConfig: rules ? rules.metricsConfig : rules }));\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, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport PipelinesPageNavigation from 'components/pipelines/PipelinesPageNavigation';\nimport DocsHelper from 'util/DocsHelper';\nimport { Row, Col, Button, ButtonToolbar } from 'components/bootstrap';\nimport { SearchForm, PaginatedList, DocumentTitle, PageHeader, Spinner, QueryHelper } from 'components/common';\nimport RuleList from 'components/rules/RuleList';\nimport RuleMetricsConfigContainer from 'components/rules/RuleMetricsConfigContainer';\nimport { DEFAULT_PAGINATION } from 'stores/PaginationTypes';\nimport type { Pagination } from 'stores/PaginationTypes';\nimport type { MetricsConfigType, PaginatedRules, RuleType } from 'stores/rules/RulesStore';\nimport { RulesActions } from 'stores/rules/RulesStore';\nimport usePaginationQueryParameter from 'hooks/usePaginationQueryParameter';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport useLocation from 'routing/useLocation';\nimport useHistory from 'routing/useHistory';\nimport Routes from 'routing/Routes';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nconst Flex = styled.div`\n display: flex;\n`;\n\nconst SpinnerWrapper = styled.div(({ theme }) => css`\n font-size: ${theme.fonts.size.h3};\n padding: ${theme.spacings.xxs} ${theme.spacings.sm};\n`);\n\nconst _loadData = (pagination: Pagination, setIsLoading, setPaginatedRules) => {\n setIsLoading(true);\n\n RulesActions.listPaginated(pagination).then((paginatedRules) => {\n setPaginatedRules(paginatedRules);\n setIsLoading(false);\n });\n};\n\nconst _loadRuleMetricData = (setMetricsConfig) => {\n RulesActions.loadMetricsConfig().then((metricsConfig: MetricsConfigType) => {\n setMetricsConfig(metricsConfig);\n });\n};\n\nconst RulesPage = () => {\n const { page, pageSize: perPage, resetPage, setPagination } = usePaginationQueryParameter();\n const { pathname } = useLocation();\n const history = useHistory();\n const sendTelemetry = useSendTelemetry();\n const [query, setQuery] = useState('');\n const [isDataLoading, setIsDataLoading] = useState(false);\n const [openMetricsConfig, toggleMetricsConfig] = useState(false);\n const [metricsConfig, setMetricsConfig] = useState();\n const [paginatedRules, setPaginatedRules] = useState();\n const { list: rules, pagination: { total = 0 } = {}, context: rulesContext } = paginatedRules ?? {};\n\n useEffect(() => {\n _loadData({ query, page, perPage }, setIsDataLoading, setPaginatedRules);\n }, [query, page, perPage]);\n\n useEffect(() => {\n _loadRuleMetricData(setMetricsConfig);\n }, []);\n\n const handleSearch = (nextQuery) => {\n resetPage();\n setQuery(nextQuery);\n };\n\n const handleDelete = (rule: RuleType) => () => {\n // TODO: Replace with custom confirm dialog\n // eslint-disable-next-line no-alert\n if (window.confirm(`Do you really want to delete rule \"${rule.title}\"?`)) {\n RulesActions.delete(rule).then(() => {\n _loadData({ query, page, perPage }, setIsDataLoading, setPaginatedRules);\n setPagination({ page: Math.max(DEFAULT_PAGINATION.page, page - 1) });\n });\n }\n };\n\n const onCloseMetricsConfig = () => {\n _loadRuleMetricData(setMetricsConfig);\n toggleMetricsConfig(false);\n };\n\n const renderDebugMetricsButton = () => {\n if (metricsConfig && metricsConfig.metrics_enabled) {\n return ;\n }\n\n return ;\n };\n\n // eslint-disable-next-line react/no-unstable-nested-components\n const RulesButtonToolbar = () => (\n \n \n {renderDebugMetricsButton()}\n \n );\n\n const isLoading = !rules;\n\n const searchFilter = (\n \n }\n wrapperClass=\"has-bm\"\n onReset={() => handleSearch('')}\n topMargin={0} />\n {isDataLoading && }\n \n );\n\n return (\n \n \n }\n documentationLink={{\n title: 'Pipeline rules documentation',\n path: DocsHelper.PAGES.PIPELINE_RULES,\n }}>\n \n Rules are a way of applying changes to messages in Graylog. A rule consists of a condition and a list of actions.\n Graylog evaluates the condition against a message and executes the actions if the condition is satisfied.\n \n \n\n \n \n {isLoading ? (\n \n ) : (\n \n \n \n \n {openMetricsConfig && }\n \n \n \n )}\n \n \n \n );\n};\n\nexport default RulesPage;\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 * as Immutable from 'immutable';\nimport type { $PropertyType } from 'utility-types';\n\nimport type { AdditionalQueries } from 'util/PaginationURL';\nimport type { UrlQueryFilters } from 'components/common/EntityFilters/types';\n\nexport type PaginatedResponseType = {\n count: number,\n total: number,\n page: number,\n per_page: number,\n query: string | null,\n};\n\nexport type PaginatedListJSON = {\n page: $PropertyType,\n per_page: $PropertyType,\n query: $PropertyType,\n total: number,\n count: number,\n};\n\nexport type Pagination = {\n page: number,\n perPage: number,\n query: string,\n additionalQueries?: AdditionalQueries,\n};\n\nexport type ListPagination = Pagination & {\n total: number,\n count: number,\n};\n\nexport const DEFAULT_PAGINATION: Pagination = {\n page: 1,\n perPage: 10,\n query: '',\n};\n\nexport type PaginatedList = {\n list: Immutable.List,\n pagination: ListPagination,\n};\n\nexport type Sort = {\n attributeId: string,\n direction: 'asc' | 'desc'\n};\n\nexport type SearchParams = {\n page: number,\n pageSize: number,\n query: string,\n sort: Sort\n filters?: UrlQueryFilters\n}\n\nexport type Attribute = {\n id: string,\n title: string,\n type?: 'BOOLEAN' | 'STRING' | 'DATE' | 'OBJECT_ID',\n sortable: boolean,\n hidden?: boolean,\n searchable?: boolean,\n filterable?: true,\n filter_options?: Array<{ value: string, title: string }>\n related_collection?: string,\n\n}\n\nexport type Attributes = Array\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';\nimport type FetchError from 'logic/errors/FetchError';\nimport type { RuleBuilderType } from 'components/rules/rule-builder/types';\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 rule_builder: RuleBuilderType,\n errors?: [],\n simulator_message?: string,\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: (ruleId: string) => Promise,\n save: (rule: RuleType) => Promise,\n update: (rule: RuleType) => Promise,\n parse: (rule: RuleType, callback: () => void) => Promise,\n simulate: (messageString: string, rule: RuleType, callback: React.Dispatch | (() => 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 simulate: { 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: 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\n promise.catch((error: FetchError) => {\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: string) {\n const failCallback = (error: 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: 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 simulator_message: ruleSource.simulator_message,\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 simulator_message: ruleSource.simulator_message,\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: 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 simulate(message, ruleToSimulate, callback) {\n const url = qualifyUrl(ruleToSimulate?.rule_builder ? ApiRoutes.RuleBuilderController.simulate().url : ApiRoutes.RulesController.simulate().url);\n const rule = {\n message,\n rule_source: undefined,\n rule_builder_dto: undefined,\n };\n\n if (ruleToSimulate?.rule_builder) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { source, ...ruleBuilderRuleToSimulate } = ruleToSimulate;\n\n rule.rule_builder_dto = {\n title: ruleBuilderRuleToSimulate.title,\n description: ruleBuilderRuleToSimulate.description,\n rule_builder: ruleBuilderRuleToSimulate.rule_builder,\n };\n } else {\n rule.rule_source = {\n title: ruleToSimulate.title,\n description: ruleToSimulate.description,\n source: ruleToSimulate.source,\n };\n }\n\n return fetch('POST', url, rule).then(callback, () => {});\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","StyledButton","theme","items","path","title","permissions","exactPathMatch","NAV_ITEMS","STRING_SIZE_LIMIT","LimitedTd","rule","onDelete","usingPipelines","id","description","created_at","modified_at","pipelinesLength","isRuleBuilder","actions","Routes","_showPipelines","pipelines","pipelineId","pipelineTitle","index","tooltip","StringUtils","RuleList","header","rules","searchFilter","headers","RuleMetricsConfig","props","onChange","nextConfig","key","value","config","event","name","FormsUtils","handleChange","RuleMetricsConfigContainer","metricsConfig","onClose","connect","RulesStore","Flex","SpinnerWrapper","_loadData","pagination","setIsLoading","setPaginatedRules","paginatedRules","_loadRuleMetricData","setMetricsConfig","page","perPage","resetPage","setPagination","usePaginationQueryParameter","pathname","useLocation","history","useHistory","sendTelemetry","useSendTelemetry","query","setQuery","isDataLoading","setIsDataLoading","openMetricsConfig","toggleMetricsConfig","total","rulesContext","handleSearch","nextQuery","handleDelete","onCloseMetricsConfig","renderDebugMetricsButton","RulesButtonToolbar","isLoading","PipelinesPageNavigation","DocsHelper","DEFAULT_PAGINATION","RulesActions","r","functions","fn1","fn2","failCallback","error","url","response","promise","ruleId","ruleSource","el","callback","message","ruleToSimulate","source","ruleBuilderRuleToSimulate","ruleNames"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy