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

web-interface.assets.b6fe2bb5-8700.a99c00da5482f0dae841.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.1
Show newest version
{"version":3,"file":"b6fe2bb5-8700.a99c00da5482f0dae841.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/hooks/useLocationSearchPagination.ts","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 { useEffect, useState } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { parse, stringify } from 'qs';\n\nimport type { Pagination } from 'stores/PaginationTypes';\n\ntype UseLocationSearchPaginationType = {\n  isInitialized: boolean,\n  pagination: Pagination,\n  setPagination: (nextPagination: Pagination) => void,\n}\n\nconst useLocationSearchPagination = (defaultPagination: Pagination): UseLocationSearchPaginationType => {\n  const history = useHistory();\n  const location = useLocation();\n  const [parsedPagination, setParsedPagination] = useState(defaultPagination);\n  const [isInitialized, setIsInitialized] = useState(false);\n\n  useEffect(() => {\n    const convertToSafePositiveInteger = (maybeNumber: any): number | undefined => {\n      const parsedNumber = Number.parseInt(maybeNumber, 10);\n\n      return (Number.isSafeInteger(parsedNumber) && parsedNumber > 0) ? parsedNumber : undefined;\n    };\n\n    const parsePaginationFromSearch = (search: string): Pagination => {\n      const parsedSearch = parse(search, { ignoreQueryPrefix: true }) ?? {};\n      const { page: searchPage, perPage: searchPerPage, query: searchQuery } = parsedSearch;\n\n      return {\n        page: convertToSafePositiveInteger(searchPage) ?? defaultPagination.page,\n        perPage: convertToSafePositiveInteger(searchPerPage) ?? defaultPagination.perPage,\n        query: typeof searchQuery === 'string' ? searchQuery : defaultPagination.query,\n      };\n    };\n\n    setParsedPagination(parsePaginationFromSearch(location.search));\n    setIsInitialized(true);\n  }, [location.search, defaultPagination]);\n\n  const setLocationSearchPagination = (nextPagination: Pagination) => {\n    history.push({\n      pathname: location.pathname,\n      search: stringify(nextPagination),\n    });\n  };\n\n  return {\n    isInitialized,\n    pagination: parsedPagination,\n    setPagination: setLocationSearchPagination,\n  };\n};\n\nexport default useLocationSearchPagination;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { DefaultTheme } from 'styled-components';\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;\nconst LimitedTd = styled.td(({ theme }: {theme: DefaultTheme}) => 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 actions = (\n    \n      \n      \n        \n      \n    \n  );\n\n  const _showPipelines = (pipelines: Array) => {\n    return 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\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) => {\n    return {header};\n  };\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 lodash from 'lodash';\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  openModal = () => {\n    this.modal.open();\n  };\n\n  closeModal = () => {\n    this.modal.close();\n  };\n\n  propagateChange = (key, value) => {\n    const { config } = this.props;\n    const nextConfig = lodash.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, onClose } = this.props;\n    const { nextConfig } = this.state;\n\n    if (!config) {\n      return 

;\n }\n\n return (\n { this.modal = modal; }}\n title=\"Rule Metrics Configuration\"\n onSubmitForm={this.saveConfiguration}\n onModalClose={onClose}\n show\n submitButtonText=\"Save\">\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\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 handleChange = (nextConfig) => {\n return RulesActions.updateMetricsConfig(nextConfig);\n };\n\n render() {\n const { metricsConfig, onClose } = this.props;\n\n if (!metricsConfig) {\n return null;\n }\n\n return (\n { this.configComponent = component; }}\n config={metricsConfig}\n onChange={this.handleChange}\n onClose={onClose} />\n );\n }\n}\n\nexport default connect(RuleMetricsConfigContainer, { rules: RulesStore }, ({ rules }) => {\n return { metricsConfig: rules ? rules.metricsConfig : rules };\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, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { LinkContainer } from 'components/common/router';\nimport { Row, Col, Button, ButtonToolbar } from 'components/bootstrap';\nimport { SearchForm, PaginatedList, DocumentTitle, PageHeader, Spinner, QueryHelper } from 'components/common';\nimport DocumentationLink from 'components/support/DocumentationLink';\nimport DocsHelper from 'util/DocsHelper';\nimport RuleList from 'components/rules/RuleList';\nimport RuleMetricsConfigContainer from 'components/rules/RuleMetricsConfigContainer';\nimport Routes from 'routing/Routes';\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 useLocationSearchPagination from 'hooks/useLocationSearchPagination';\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 [isDataLoading, setIsDataLoading] = useState(false);\n const [openMetricsConfig, toggleMetricsConfig] = useState(false);\n const [metricsConfig, setMetricsConfig] = useState();\n const { isInitialized: isPaginationReady, pagination, setPagination } = useLocationSearchPagination(DEFAULT_PAGINATION);\n const [paginatedRules, setPaginatedRules] = useState();\n const { list: rules, pagination: { total = 0, count = 0 } = {}, context: rulesContext } = paginatedRules ?? {};\n const { page, perPage, query } = pagination;\n\n useEffect(() => {\n if (isPaginationReady) {\n _loadData(pagination, setIsDataLoading, setPaginatedRules);\n }\n }, [isPaginationReady, pagination]);\n\n useEffect(() => {\n _loadRuleMetricData(setMetricsConfig);\n }, []);\n\n const handlePageChange = (newPage, newPerPage) => {\n setPagination({ ...pagination, page: newPage, perPage: newPerPage });\n };\n\n const handleSearch = (nextQuery) => {\n setPagination({ ...pagination, query: nextQuery, page: DEFAULT_PAGINATION.page });\n };\n\n const handleDelete = (rule: RuleType) => {\n return () => {\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 if (count > 1) {\n _loadData(pagination, setIsDataLoading, setPaginatedRules);\n\n return;\n }\n\n setPagination({ page: Math.max(DEFAULT_PAGINATION.page, pagination.page - 1), perPage, query });\n });\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 const RulesButtonToolbar = () => (\n \n \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 \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 Read more about Graylog pipeline rules in the .\n \n\n \n \n \n \n  \n \n \n \n  \n \n \n \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};\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';\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","/*\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 naturalSort from 'javascript-natural-sort';\n\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: () => Promise,\n update: () => Promise,\n parse: () => 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":["defaultPagination","history","useHistory","location","useLocation","useState","parsedPagination","setParsedPagination","isInitialized","setIsInitialized","useEffect","search","parsedSearch","searchPage","searchPerPage","searchQuery","convertToSafePositiveInteger","maybeNumber","parsedNumber","Number","parseInt","isSafeInteger","undefined","parse","ignoreQueryPrefix","page","perPage","query","pagination","setPagination","nextPagination","push","pathname","stringify","LimitedTd","styled","theme","css","breakpoints","max","md","rule","onDelete","usingPipelines","id","title","description","created_at","modified_at","pipelinesLength","length","actions","bsStyle","bsSize","onClick","to","Routes","key","className","dateTime","name","zeroOnMissing","suffix","showTotal","hideOnMissing","map","index","pipelineId","pipelineTitle","tooltip","show","placement","trigger","overlay","rootClose","StringUtils","RuleList","header","props","rulesContext","used_in_pipelines","this","rules","searchFilter","headers","headerCellFormatter","_headerCellFormatter","sortByKey","rows","customFilter","dataRowFormatter","_ruleInfoFormatter","filterKeys","React","PropTypes","RuleMetricsConfig","onChange","state","nextConfig","then","closeModal","modal","open","close","value","config","lodash","setState","event","target","propagateChange","FormsUtils","onClose","ref","onSubmitForm","saveConfiguration","onModalClose","submitButtonText","type","label","handleChange","checked","metrics_enabled","text","RuleMetricsConfigContainer","RulesActions","metricsConfig","component","configComponent","connect","RulesStore","Flex","SpinnerWrapper","fonts","size","h3","spacings","xxs","sm","_loadData","setIsLoading","setPaginatedRules","paginatedRules","_loadRuleMetricData","setMetricsConfig","isDataLoading","setIsDataLoading","openMetricsConfig","toggleMetricsConfig","useLocationSearchPagination","DEFAULT_PAGINATION","isPaginationReady","list","total","count","context","handleSearch","nextQuery","RulesButtonToolbar","isLoading","onSearch","queryWidth","queryHelpComponent","entityName","wrapperClass","onReset","topMargin","delay","subactions","DocumentationLink","DocsHelper","newPage","newPerPage","totalItems","activePage","pageSize","window","confirm","Math","singletonActions","Reflux","delete","asyncResult","get","save","update","multiple","loadFunctions","loadMetricsConfig","updateMetricsConfig","listPaginated","singletonStore","listenables","functionDescriptors","getInitialState","_updateRulesState","some","r","_updateFunctionDescriptors","functions","sort","fn1","fn2","naturalSort","url","qualifyUrl","ApiRoutes","fetch","response","error","UserNotification","message","PaginationURL","promise","per_page","additional","status","ruleId","ruleSource","source","filter","el","callback","body","ruleNames"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy