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

web-interface.assets.1255d548-4349.fdf67b80fb715647c1b2.js.map Maven / Gradle / Ivy

There is a newer version: 6.1.4
Show newest version
{"version":3,"file":"1255d548-4349.fdf67b80fb715647c1b2.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/lookup-tables/ErrorPopover.css","webpack://graylog-web-interface/./src/components/lookup-tables/Overview.css","webpack://graylog-web-interface/./src/components/common/PageNavigation.tsx","webpack://graylog-web-interface/./src/components/common/withPaginationQueryParameter.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/LUTPageNavigation.tsx","webpack://graylog-web-interface/./src/components/maps/adapter/MaxmindAdapterFieldSet.tsx","webpack://graylog-web-interface/./src/components/maps/adapter/MaxmindAdapterSummary.jsx","webpack://graylog-web-interface/./src/components/maps/adapter/MaxmindAdapterDocumentation.jsx","webpack://graylog-web-interface/./src/components/maps/adapter/index.js","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/CSVFileAdapterFieldSet.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/CSVFileAdapterSummary.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/CSVFileAdapterDocumentation.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/DnsAdapterFieldSet.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/DnsAdapterSummary.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/DnsAdapterDocumentation.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/DSVHTTPAdapterFieldSet.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/DSVHTTPAdapterSummary.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/DSVHTTPAdapterDocumentation.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/HTTPJSONPathAdapterFieldSet.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/HTTPJSONPathAdapterSummary.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/HTTPJSONPathAdapterDocumentation.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/adapters/index.js","webpack://graylog-web-interface/./src/components/lookup-tables/caches/NullCacheFieldSet.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/caches/NullCacheSummary.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/caches/CaffeineCacheFieldSet.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/caches/SummaryComponents.styled.ts","webpack://graylog-web-interface/./src/components/lookup-tables/caches/CaffeineCacheSummary.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/caches/CaffeineCacheDocumentation.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/caches/index.js","webpack://graylog-web-interface/./src/components/lookup-tables/LUTTableEntry.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/Overview.css?fdd4","webpack://graylog-web-interface/./src/components/lookup-tables/LookupTablesOverview.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/LookupTableView.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/LookupTableForm.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/LookupTableCreate.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/CacheTableEntry.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/CachesOverview.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/Cache.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/CacheForm.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/CacheCreate.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/CachePicker.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/CachesContainer.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/DataAdapterTableEntry.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/DataAdaptersOverview.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/ConfigSummaryDefinitionListWrapper.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/DataAdapter.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/DataAdapterForm.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/DataAdapterCreate.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/DataAdapterPicker.tsx","webpack://graylog-web-interface/./src/components/lookup-tables/DataAdaptersContainer.jsx","webpack://graylog-web-interface/./src/components/lookup-tables/ErrorPopover.css?9489","webpack://graylog-web-interface/./src/components/lookup-tables/ErrorPopover.tsx","webpack://graylog-web-interface/./src/hooks/useScopePermissions.ts","webpack://graylog-web-interface/./src/routing/withHistory.tsx","webpack://graylog-web-interface/./src/routing/withParams.tsx","webpack://graylog-web-interface/./src/stores/lookup-tables/LookupTableCachesStore.js","webpack://graylog-web-interface/./src/stores/lookup-tables/LookupTableDataAdaptersStore.js","webpack://graylog-web-interface/./src/stores/lookup-tables/LookupTablesStore.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n._WOp2bWqXDYrxvBkNQVa {\n    max-width: 400px;\n}\n\n.ZB8sCgEwW7KZwhU6vhHF {\n    margin-right: 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/lookup-tables/ErrorPopover.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;;;;;;;EAeE;AACF;IACI,gBAAgB;AACpB;;AAEA;IACI,iBAAiB;AACrB\",\"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 */\\n:local(.overlay) {\\n    max-width: 400px;\\n}\\n\\n:local(.trigger) {\\n    margin-right: 5px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"overlay\": `_WOp2bWqXDYrxvBkNQVa`,\n\t\"trigger\": `ZB8sCgEwW7KZwhU6vhHF`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n.eooimJB8iUwv4GuS5OgP {\n    cursor: help;\n    padding: 0 0 0 2px;\n    margin-left: 5px;\n}\n\n.EM8rNPeHI3I13MdYidzw {\n    max-width: 500px;\n    min-width: 350px;\n}\n\n/* styles for table columns */\n.oNIxQlLcjvvFY27jyODI {\n    width: 15%;\n}\n.jXZIhUCAUZtfWZKKiLy0 {\n    max-width: 50%;\n    width: 35%\n}\n.Ii_DwC6G4wRm7thBYSKE {\n    width: 15%;\n}\n.q54g6XMj1D9X2J48jgrw {\n    width: 15%;\n}\n.wFLgXxYT9cnZwrNRg6DJ {\n    width: 15%;\n}\n.mk2GxDtbjbYu9RWQh_nL {\n    min-width: 100px;\n}\n\noverviewTable {\n    width: 100%;\n    table-layout: fixed;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/lookup-tables/Overview.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;;;;;;;EAeE;AACF;IACI,YAAY;IACZ,kBAAkB;IAClB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA,6BAA6B;AAC7B;IACI,UAAU;AACd;AACA;IACI,cAAc;IACd;AACJ;AACA;IACI,UAAU;AACd;AACA;IACI,UAAU;AACd;AACA;IACI,UAAU;AACd;AACA;IACI,gBAAgB;AACpB;;AAEA;IACI,WAAW;IACX,mBAAmB;AACvB\",\"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 */\\n:local(.searchHelpButton) {\\n    cursor: help;\\n    padding: 0 0 0 2px;\\n    margin-left: 5px;\\n}\\n\\n:local(.popoverWide) {\\n    max-width: 500px;\\n    min-width: 350px;\\n}\\n\\n/* styles for table columns */\\n:local(.rowTitle) {\\n    width: 15%;\\n}\\n:local(.rowDescription) {\\n    max-width: 50%;\\n    width: 35%\\n}\\n:local(.rowName) {\\n    width: 15%;\\n}\\n:local(.rowCache) {\\n    width: 15%;\\n}\\n:local(.rowAdapter) {\\n    width: 15%;\\n}\\n:local(.rowActions) {\\n    min-width: 100px;\\n}\\n\\n:local(overviewTable) {\\n    width: 100%;\\n    table-layout: fixed;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"searchHelpButton\": `eooimJB8iUwv4GuS5OgP`,\n\t\"popoverWide\": `EM8rNPeHI3I13MdYidzw`,\n\t\"rowTitle\": `oNIxQlLcjvvFY27jyODI`,\n\t\"rowDescription\": `jXZIhUCAUZtfWZKKiLy0`,\n\t\"rowName\": `Ii_DwC6G4wRm7thBYSKE`,\n\t\"rowCache\": `q54g6XMj1D9X2J48jgrw`,\n\t\"rowAdapter\": `wFLgXxYT9cnZwrNRg6DJ`,\n\t\"rowActions\": `mk2GxDtbjbYu9RWQh_nL`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * 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 usePaginationQueryParameter from 'hooks/usePaginationQueryParameter';\n\nexport type PaginationQueryParameterObject = {\n  pageSizes?: number[];\n};\n\nconst withPaginationQueryParameter = >>(Component: C, obj?: PaginationQueryParameterObject) => function WrappedComponent(props: any) {\n  const result = usePaginationQueryParameter(obj?.pageSizes);\n\n  return ;\n};\n\nexport default withPaginationQueryParameter;\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: 'Lookup Tables', path: Routes.SYSTEM.LOOKUPTABLES.OVERVIEW, exactPathMatch: true },\n  { title: 'Caches', path: Routes.SYSTEM.LOOKUPTABLES.CACHES.OVERVIEW },\n  { title: 'Data Adapters', path: Routes.SYSTEM.LOOKUPTABLES.DATA_ADAPTERS.OVERVIEW },\n];\n\nconst LUTPageNavigation = () => (\n  \n    \n  \n);\n\nexport default LUTPageNavigation;\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 AppConfig from 'util/AppConfig';\nimport ObjectUtils from 'util/ObjectUtils';\nimport { Input } from 'components/bootstrap';\nimport { Select, TimeUnitInput } from 'components/common';\n\nexport type Config = {\n  path: string,\n  database_type: string,\n  check_interval: number,\n  check_interval_unit: string,\n};\ntype MaxmindAdapterFieldSetProps = {\n  config: Config;\n  updateConfig: (newConfig: object) => void,\n  handleFormEvent: (e: { target: { name: string; value?: string } }) => void;\n  validationState: (key: string) => string | undefined,\n  validationMessage: (key: string, message: string) => string | undefined,\n};\n\nconst MaxmindAdapterFieldSet = ({ config, updateConfig, handleFormEvent, validationState, validationMessage }: MaxmindAdapterFieldSetProps) => {\n  const isCloud = AppConfig.isCloud();\n\n  const pathsForCloud = {\n    IPINFO_STANDARD_LOCATION: '/etc/graylog/server/standard_location.mmdb',\n    IPINFO_ASN: '/etc/graylog/server/asn.mmdb',\n  };\n\n  const ipInfoDatabaseTypes = [\n    { label: 'IPinfo location database', value: 'IPINFO_STANDARD_LOCATION' },\n    { label: 'IPinfo ASN database', value: 'IPINFO_ASN' },\n  ];\n\n  let databaseTypes = [\n    { label: 'ASN database', value: 'MAXMIND_ASN' },\n    { label: 'City database', value: 'MAXMIND_CITY' },\n    { label: 'Country database', value: 'MAXMIND_COUNTRY' },\n  ];\n\n  if (isCloud) {\n    databaseTypes = ipInfoDatabaseTypes;\n  } else {\n    databaseTypes = databaseTypes.concat(ipInfoDatabaseTypes);\n  }\n\n  const update = (value: number, unit: string, enabled: boolean, name: string) => {\n    const newConfig = ObjectUtils.clone(config);\n\n    newConfig[name] = enabled ? value : 0;\n    newConfig[`${name}_unit`] = unit;\n    updateConfig(newConfig);\n  };\n\n  const updateCheckInterval = (value: number, unit: string, enabled: boolean) => {\n    update(value, unit, enabled, 'check_interval');\n  };\n\n  const onDbTypeSelect = (id: string) => {\n    const newConfig = ObjectUtils.clone(config);\n\n    if (isCloud) {\n      newConfig.path = pathsForCloud[id];\n    }\n\n    newConfig.database_type = id;\n    updateConfig(newConfig);\n  };\n\n  return (\n    
\n {!isCloud && (\n \n )}\n \n \n \n \n \n \n \n \n \n
\n);\n\nexport default CSVFileAdapterFieldSet;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nimport type { LookupTableAdapter } from 'logic/lookup-tables/types';\n\ntype Props = {\n dataAdapter: LookupTableAdapter,\n};\n\nconst CSVFileAdapterSummary = ({ dataAdapter }: Props) => {\n const { config } = dataAdapter;\n\n return (\n
\n
File path
\n
{config.path}
\n
Separator
\n
{config.separator}
\n
Quote character
\n
{config.quotechar}
\n
Key column
\n
{config.key_column}
\n
Value column
\n
{config.value_column}
\n
Check interval
\n
{config.check_interval} seconds
\n
Case-insensitive lookup
\n
{config.case_insensitive_lookup ? 'yes' : 'no'}
\n
CIDR lookup
\n
{config.cidr_lookup ? 'yes' : 'no'}
\n
\n );\n};\n\nexport default CSVFileAdapterSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n/* eslint-disable react/no-unescaped-entities */\nimport React from 'react';\n\nimport { Alert } from 'components/bootstrap';\n\nconst CSVFileAdapterDocumentation = () => {\n const csvFile1 = `\"ipaddr\",\"hostname\"\n\"127.0.0.1\",\"localhost\"\n\"10.0.0.1\",\"server1\"\n\"10.0.0.2\",\"server2\"`;\n\n const csvFile2 = `'ipaddr';'lladdr';'hostname'\n'127.0.0.1';'e4:b2:11:d1:38:14';'localhost'\n'10.0.0.1';'e4:b2:12:d1:48:28';'server1'\n'10.0.0.2';'e4:b2:11:d1:58:34';'server2'`;\n\n const csvFile3 = `\"cidr\",\"subnet\"\n\"192.168.100.0/24\",\"Finance Department subnet\"\n\"192.168.101.0/24\",\"IT Department subnet\"\n\"192.168.102.0/24\",\"HR Department subnet\"`;\n\n return (\n
\n

The CSV data adapter can read key value pairs from a CSV file.

\n

Please make sure your CSV file is formatted according to your configuration settings.

\n\n \n
    \n
  • The first line in the CSV file needs to be a list of field/column names
  • \n
  • The file uses utf-8 encoding
  • \n
  • The file is readable by every Graylog server node
  • \n
\n
\n\n
\n\n

Example 1

\n\n
Configuration
\n

\n Separator: ,
\n Quote character: \"
\n Key column: ipaddr
\n Value column: hostname\n

\n\n
CSV File
\n
{csvFile1}
\n\n

Example 2

\n\n
Configuration
\n

\n Separator: ;
\n Quote character: '
\n Key column: ipaddr
\n Value column: hostname\n

\n\n
CSV File
\n
{csvFile2}
\n\n

CIDR Lookups

\n

\n If this data adapter will be used to lookup IP address keys against CIDR addresses
\n then it should be marked as a CIDR lookup. For example:
\n

\n\n
Configuration
\n

\n Separator: ,
\n Quote character: \"
\n Key column: cidr
\n Value column: subnet
\n CIDR lookup: true\n

\n\n
CSV File
\n
{csvFile3}
\n\n

Given this CSV file and configuration looking up the key 192.168.101.64 would return 'IT Department subnet'.

\n
\n );\n};\n\nexport default CSVFileAdapterDocumentation;\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 ObjectUtils from 'util/ObjectUtils';\nimport { Input } from 'components/bootstrap';\nimport { Select, TimeUnitInput } from 'components/common';\n\nclass DnsAdapterFieldSet extends React.Component {\n static propTypes = {\n config: PropTypes.shape({\n request_timeout: PropTypes.number.isRequired,\n server_ips: PropTypes.string,\n }).isRequired,\n updateConfig: PropTypes.func.isRequired,\n handleFormEvent: PropTypes.func.isRequired,\n validationMessage: PropTypes.func.isRequired,\n validationState: PropTypes.func.isRequired,\n };\n\n _onLookupTypeSelect = (id) => {\n const { config, updateConfig } = this.props;\n const newConfig = ObjectUtils.clone(config);\n\n newConfig.lookup_type = id;\n updateConfig(newConfig);\n };\n\n updateCacheTTLOverride = (value, unit, enabled) => {\n this._updateCacheTTLOverride(value, unit, enabled, 'cache_ttl_override');\n };\n\n _updateCacheTTLOverride = (value, unit, enabled, fieldPrefix) => {\n const { config, updateConfig } = this.props;\n const newConfig = ObjectUtils.clone(config);\n\n // If Cache TTL Override box is checked, then save the value. If not, then do not save it.\n if (enabled && value) {\n newConfig[fieldPrefix] = enabled && value ? value : null;\n newConfig[`${fieldPrefix}_enabled`] = enabled;\n } else {\n newConfig[fieldPrefix] = null;\n newConfig[`${fieldPrefix}_enabled`] = false;\n }\n\n newConfig[`${fieldPrefix}_unit`] = enabled ? unit : null;\n updateConfig(newConfig);\n };\n\n render() {\n const {\n config,\n handleFormEvent,\n validationMessage,\n validationState,\n } = this.props;\n const lookupTypes = [\n { label: 'Resolve hostname to IPv4 address (A)', value: 'A' },\n { label: 'Resolve hostname to IPv6 address (AAAA)', value: 'AAAA' },\n { label: 'Resolve hostname to IPv4 and IPv6 addresses (A and AAAA)', value: 'A_AAAA' },\n { label: 'Reverse lookup (PTR)', value: 'PTR' },\n { label: 'Text lookup (TXT)', value: 'TXT' },\n ];\n\n return (\n
\n \n \n \n \n
\n );\n }\n}\n\nexport default DnsAdapterFieldSet;\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 { TimeUnit } from 'components/common';\n\nconst DnsAdapterSummary = ({ dataAdapter }) => {\n const { config } = dataAdapter;\n\n // Allows enum > display label translation.\n const lookupType = {\n A: 'Resolve hostname to IPv4 address (A)',\n AAAA: 'Resolve hostname to IPv6 address (AAAA)',\n A_AAAA: 'Resolve hostname to IPv4 and IPv6 address (A and AAAA)',\n PTR: 'Reverse lookup (PTR)',\n TXT: 'Text lookup (TXT)',\n };\n\n return (\n
\n
DNS Lookup Type
\n
{lookupType[config.lookup_type]}
\n\n
DNS Server IP Address
\n
{config.server_ips || 'n/a'}
\n\n
DNS Request Timeout
\n
{config.request_timeout} ms
\n\n
Cache TTL Override
\n
\n {!config.cache_ttl_override_enabled ? 'n/a' : }\n
\n
\n );\n};\n\nDnsAdapterSummary.propTypes = {\n dataAdapter: PropTypes.shape({\n config: PropTypes.shape({\n lookup_type: PropTypes.string.isRequired,\n request_timeout: PropTypes.number.isRequired,\n }),\n }).isRequired,\n};\n\nexport default DnsAdapterSummary;\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 styled, { css } from 'styled-components';\n\nconst StyledPre = styled.pre(({ theme }) => css`\n font-size: ${theme.fonts.size.small};\n`);\n\nconst DnsAdapterDocumentation = () => {\n const styleMarginBottom = { marginBottom: 10 };\n\n const aResponse = `{\n \"single_value\": \"34.239.63.98\",\n \"multi_value\": {\n \"results\": [\n {\n \"ip_address\": \"34.239.63.98\",\n \"dns_ttl\": 60\n },\n {\n \"ip_address\": \"34.238.48.57\",\n \"dns_ttl\": 60\n }\n ]\n },\n \"ttl\": 60000\n}`;\n\n const aaaaResponse = `{\n \"single_value\": \"2307:f8b0:3000:800:0:0:0:200e\",\n \"multi_value\": {\n \"results\": [\n {\n \"ip_address\": \"2307:f8b0:3000:800:0:0:0:200e\",\n \"dns_ttl\": 77\n }\n ]\n },\n \"ttl\": 77000\n}`;\n\n const aAndAaaaResponse = `{\n \"single_value\": \"144.222.6.132\",\n \"multi_value\": {\n \"results\": [\n {\n \"ip_address\": \"144.222.6.132\",\n \"dns_ttl\": 32,\n \"ip_version\": \"IPv4\"\n },\n {\n \"ip_address\": \"1207:f8b1:6003:b01:0:0:0:8a\",\n \"dns_ttl\": 299,\n \"ip_version\": \"IPv6\"\n }\n ]\n },\n \"ttl\": 32000\n}`;\n\n const ptrResponse = `{\n \"single_value\": \"c-45-216-65-41.hd1.fl.someisp.co.uk\",\n \"multi_value\": {\n \"domain\": \"someisp.co.uk\",\n \"full_domain\": \"c-45-216-65-41.hd1.fl.someisp.co.uk\",\n \"dns_ttl\": \"300\",\n },\n \"ttl\": 300000\n}`;\n\n const txtResponse = `{\n \"single_value\": null,\n \"multi_value\": {\n \"results\": [\n {\n \"value\": \"Some text value that lives in a TXT DNS\",\n \"dns_ttl\": 300\n },\n {\n \"value\": \"v=spf1 include:some-email-domain.org ~all.\",\n \"dns_ttl\": 200\n }\n ]\n },\n \"ttl\": 200000\n}`;\n\n return (\n\n
\n\n

Configuration

\n\n
DNS Lookup Type
\n\n

\n Resolve hostname to IPv4 address (A): Returns both a single_value containing one\n of the IPv4 addresses that the hostname resolves to,\n and a multi_value containing all IPv4 addresses that the hostname resolves to.\n Input for this type must be a pure domain name (eg. api.graylog.com).\n

\n {aResponse}\n\n

\n Resolve hostname to IPv6 address (AAAA): Returns both a single_value containing\n one of the IPv6 addresses that the hostname resolves to,\n and a multi_value containing all IPv6 addresses that the hostname resolves to.\n Input for this type must be a pure domain name (eg. api.graylog.com).\n

\n {aaaaResponse}\n\n

\n Resolve hostname to IPv4 and IPv6 address (A and AAAA): Returns both\n a single_value containing\n one of the IPv4 or IPv6 addresses that the hostname resolves to (will return IPv4 if available),\n and a multi_value containing all IPv4 and IPv6 addresses that the hostname resolves to.\n Input for this type must be a pure domain name (eg. api.graylog.com).\n

\n {aAndAaaaResponse}\n\n

\n Reverse lookup (PTR): Returns a single_value containing the PTR value if defined\n for the IP address. The domain field displays the domain name (with no subdomains).\n The full_domain field displays the full un-trimmed host name/PTR value.\n The input for this type must be a pure IPv4 or IPv6 address\n (eg. 10.0.0.1 or 2622:f3b0:4000:812::200c).\n

\n {ptrResponse}\n\n

\n Text lookup (TXT): Returns a multi_value with all TXT records defined for the\n hostname.\n Input for this type must be a pure domain name (eg. api.graylog.com).\n

\n {txtResponse}\n\n
DNS Server IP Addresses
\n\n

\n A comma-separated list of DNS server IP addresses and optional ports to use (eg. 192.168.1.1:5353, 192.168.1.244).\n Leave this blank to use the DNS server defined for your local system. All requests use port 53 unless\n otherwise specified.\n

\n\n
DNS Request Timeout
\n\n

\n The DNS request timeout in milliseconds.\n

\n\n
Cache TTL Override
\n\n

\n If enabled, the TTL for this adapter's cache will be overridden with the specified value.\n

\n\n
\n );\n};\n\nexport default DnsAdapterDocumentation;\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 { Input } from 'components/bootstrap';\nimport { URLWhiteListInput } from 'components/common';\n\nconst DSVHTTPAdapterFieldSet = ({ handleFormEvent, validationState, validationMessage, config }) => (\n
\n \n \n \n \n \n \n \n \n \n \n
\n);\n\nDSVHTTPAdapterFieldSet.propTypes = {\n config: PropTypes.object.isRequired,\n\n handleFormEvent: PropTypes.func.isRequired,\n validationState: PropTypes.func.isRequired,\n validationMessage: PropTypes.func.isRequired,\n};\n\nexport default DSVHTTPAdapterFieldSet;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nconst DSVHTTPAdapterSummary = ({ dataAdapter }) => {\n const { config } = dataAdapter;\n\n return (\n
\n
File URL
\n
{config.url}
\n
Separator
\n
{config.separator}
\n
Line Separator
\n
{config.line_separator}
\n
Quote character
\n
{config.quotechar}
\n
Ignore lines starting with
\n
{config.ignorechar}
\n
Key column
\n
{config.key_column}
\n
Value column
\n
{config.value_column}
\n
Check interval
\n
{config.check_interval} seconds
\n
Case-insensitive lookup
\n
{config.case_insensitive_lookup ? 'yes' : 'no'}
\n
\n );\n};\n\nexport default DSVHTTPAdapterSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nimport { Alert } from 'components/bootstrap';\n\nconst DSVHTTPAdapterDocumentation = () => {\n const csvFile1 = `\"127.0.0.1\",\"localhost\"\n\"10.0.0.1\",\"server1\"\n\"10.0.0.2\",\"server2\"`;\n\n const csvFile2 = `'127.0.0.1';'e4:b2:11:d1:38:14'\n'10.0.0.1';'e4:b2:12:d1:48:28'\n'10.0.0.2';'e4:b2:11:d1:58:34'`;\n\n return (\n
\n

The DSV data adapter can read key value pairs (or check for the presence of a key) from a DSV file.

\n

Please make sure your DSV file is formatted according to your configuration settings.

\n\n \n
    \n
  • The file uses utf-8 encoding
  • \n
  • The file is accessible using the same URL by every Graylog server node
  • \n
\n
\n\n
\n\n

Example 1

\n\n
Configuration
\n

\n Separator: ,
\n Quote character: \"
\n

\n\n
DSV File
\n
{csvFile1}
\n\n

Example 2

\n\n
Configuration
\n

\n Separator: ;
\n Quote character: '
\n

\n\n
DSV File
\n
{csvFile2}
\n
\n );\n};\n\nexport default DSVHTTPAdapterDocumentation;\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 type { SyntheticEvent } from 'react';\nimport React from 'react';\n\nimport { Input } from 'components/bootstrap';\nimport { URLWhiteListInput, KeyValueTable } from 'components/common';\nimport ObjectUtils from 'util/ObjectUtils';\n\ntype Headers = { [key: string]: string };\n\ntype Config = {\n headers: Headers,\n url: string,\n single_value_jsonpath: string,\n multi_value_jsonpath: string,\n user_agent: string,\n};\n\ntype Props = {\n config: Config,\n updateConfig: (config: Config) => void,\n handleFormEvent: (event: SyntheticEvent) => void,\n validationState: (state: string) => string,\n validationMessage: (field: string, message: string) => string,\n};\n\nclass HTTPJSONPathAdapterFieldSet extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n handleFormEvent: PropTypes.func.isRequired,\n validationState: PropTypes.func.isRequired,\n validationMessage: PropTypes.func.isRequired,\n };\n\n onHTTPHeaderUpdate = (headers: Headers) => {\n const { config, updateConfig } = this.props;\n const configChange = ObjectUtils.clone(config);\n\n configChange.headers = headers;\n updateConfig(configChange);\n };\n\n render() {\n const { config, handleFormEvent, validationMessage, validationState } = this.props;\n\n return (\n
\n \n \n \n \n \n \n \n\n
\n );\n }\n}\n\nexport default HTTPJSONPathAdapterFieldSet;\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 { KeyValueTable } from 'components/common';\n\nconst HTTPJSONPathAdapterSummary = ({ dataAdapter }) => {\n const { config } = dataAdapter;\n\n return (\n
\n
Lookup URL
\n
{config.url}
\n
Single value JSONPath
\n
{config.single_value_jsonpath}
\n
Multi value JSONPath
\n
{config.multi_value_jsonpath}
\n
HTTP User-Agent
\n
{config.user_agent}
\n
HTTP Headers
\n
\n
\n );\n};\n\nHTTPJSONPathAdapterSummary.propTypes = {\n dataAdapter: PropTypes.object.isRequired,\n};\n\nexport default HTTPJSONPathAdapterSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n/* eslint-disable no-template-curly-in-string */\nimport React from 'react';\n\nimport { Alert, Col, Row } from 'components/bootstrap';\n\nconst HTTPJSONPathAdapterDocumentation = () => {\n const exampleJSON = `{\n \"user\": {\n \"login\": \"jane\",\n \"full_name\": \"Jane Doe\",\n \"roles\": [\"admin\", \"developer\"],\n \"contact\": {\n \"email\": \"[email protected]\",\n \"cellphone\": \"+49123456789\"\n }\n }\n}`;\n const noMultiResult = '{\"value\": \"Jane Doe\"}';\n const mapResult = `{\n \"login\": \"jane\",\n \"full_name\": \"Jane Doe\",\n \"roles\": [\"admin\", \"developer\"],\n \"contact\": {\n \"email\": \"[email protected]\",\n \"cellphone\": \"+49123456789\"\n }\n}`;\n const smallMapResult = `{\n \"email\": \"[email protected]\",\n \"cellphone\": \"+49123456789\"\n}`;\n const listResult = `{\n \"value\": [\"admin\", \"developer\"]\n}`;\n const pipelineRule = `rule \"lookup user\"\nwhen has_field(\"user_login\")\nthen\n // Get the user login from the message\n let userLogin = to_string($message.user_login);\n // Lookup the single value, in our case the full name, in the user-api lookup table\n let userName = lookup_value(\"user-api\", userLogin);\n // Set the field \"user_name\" in the message\n set_field(\"user_name\", userName)\n\n // Lookup the multi value in the user-api lookup table\n let userData = lookup(\"user-api\", userLogin);\n // Set the email and cellphone as fields in the message\n set_field(\"user_email\", userData[\"email\"]);\n set_field(\"user_cellphone\", userData[\"cellphone\"]);\nend`;\n\n return (\n
\n

\n The HTTPJSONPath data adapter executes HTTP GET requests to lookup a key and parses the result based on\n configured JSONPath expressions.\n

\n\n \n Every lookup table result has two values. A single value and a multi value. The single\n value will be used when the lookup result is expected to be a string, number or boolean. The multi value\n will be used when the lookup result is expected to be a map or list.\n \n\n

Configuration

\n\n
Lookup URL
\n

\n The URL that will be used for the HTTP request. To use the lookup key in the URL, the\n {'${key}'}\n value can be used. This variable will be replaced by the actual key that is passed to a lookup function.
\n (example: {'https://example.com/api/lookup?key=${key}'})\n

\n\n
Single value JSONPath
\n

\n This JSONPath expression will be used to parse the single value of the lookup result.\n (example: $.user.full_name)\n

\n\n
Multi value JSONPath
\n

\n This JSONPath expression will be used to parse the multi value of the lookup result.\n (example: $.users[*])\n The multi value JSONPath setting is optional. Without it, the single value is also present in the\n multi value result.\n

\n\n
HTTP User-Agent
\n

\n This is the User-Agent header that will be used for the HTTP requests. You should include some\n contact details so owners of the services you query know whom to contact if issues arise.\n (like excessive API requests from your Graylog cluster)\n

\n\n
\n\n

Example

\n

\n This shows an example configuration and the values that will be returned from a lookup.
\n The configured URL is {'https://example.com/api/users/${key}'} and the {'${key}'}\n gets replaced by jane during the lookup request.\n

\n

\n This is the resulting JSON document:\n

\n
{exampleJSON}
\n\n \n \n
Configuration
\n

\n Single value JSONPath: $.user.full_name
\n Multi value JSONPath: empty
\n

\n \n \n
Result
\n

\n Single value: Jane Doe
\n Multi value:\n

\n
{noMultiResult}
\n \n
\n \n \n
Configuration
\n

\n Single value JSONPath: $.user.full_name
\n Multi value JSONPath: $.user
\n

\n \n \n
Result
\n

\n Single value: Jane Doe
\n Multi value:\n

\n
{mapResult}
\n \n
\n \n \n
Configuration
\n

\n Single value JSONPath: $.user.contact.email
\n Multi value JSONPath: $.user.roles[*]
\n

\n \n \n
Result
\n

\n Single value: [email protected]
\n Multi value:\n

\n
{listResult}
\n \n
\n \n \n
Configuration
\n

\n Single value JSONPath: $.user.full_name
\n Multi value JSONPath: $.user.contact
\n

\n \n \n
Result
\n

\n Single value: Jane Doe
\n Multi value:\n

\n
{smallMapResult}
\n \n
\n\n
Pipeline Rule
\n

\n This is an example pipeline rule that uses the example data from our last configuration example.\n

\n
{pipelineRule}
\n
\n );\n};\n\nexport default HTTPJSONPathAdapterDocumentation;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\n\nimport 'components/maps/adapter';\nimport CSVFileAdapterFieldSet from './CSVFileAdapterFieldSet';\nimport CSVFileAdapterSummary from './CSVFileAdapterSummary';\nimport CSVFileAdapterDocumentation from './CSVFileAdapterDocumentation';\nimport DnsAdapterFieldSet from './DnsAdapterFieldSet';\nimport DnsAdapterSummary from './DnsAdapterSummary';\nimport DnsAdapterDocumentation from './DnsAdapterDocumentation';\nimport DSVHTTPAdapterFieldSet from './DSVHTTPAdapterFieldSet';\nimport DSVHTTPAdapterSummary from './DSVHTTPAdapterSummary';\nimport DSVHTTPAdapterDocumentation from './DSVHTTPAdapterDocumentation';\nimport HTTPJSONPathAdapterFieldSet from './HTTPJSONPathAdapterFieldSet';\nimport HTTPJSONPathAdapterSummary from './HTTPJSONPathAdapterSummary';\nimport HTTPJSONPathAdapterDocumentation from './HTTPJSONPathAdapterDocumentation';\n\nPluginStore.register(new PluginManifest({}, {\n lookupTableAdapters: [\n {\n type: 'csvfile',\n displayName: 'CSV File',\n formComponent: CSVFileAdapterFieldSet,\n summaryComponent: CSVFileAdapterSummary,\n documentationComponent: CSVFileAdapterDocumentation,\n },\n {\n type: 'dnslookup',\n displayName: 'DNS Lookup',\n formComponent: DnsAdapterFieldSet,\n summaryComponent: DnsAdapterSummary,\n documentationComponent: DnsAdapterDocumentation,\n },\n {\n type: 'dsvhttp',\n displayName: 'DSV File from HTTP',\n formComponent: DSVHTTPAdapterFieldSet,\n summaryComponent: DSVHTTPAdapterSummary,\n documentationComponent: DSVHTTPAdapterDocumentation,\n },\n {\n type: 'httpjsonpath',\n displayName: 'HTTP JSONPath',\n formComponent: HTTPJSONPathAdapterFieldSet,\n summaryComponent: HTTPJSONPathAdapterSummary,\n documentationComponent: HTTPJSONPathAdapterDocumentation,\n },\n ],\n}));\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nconst NullCacheFieldSet = () => null;\n\nexport default React.forwardRef(NullCacheFieldSet);\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\nconst NullCacheSummary = () => (

This cache has no configuration.

);\n\nexport default NullCacheSummary;\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 { useFormikContext } from 'formik';\n\nimport { FormikFormGroup, TimeUnitInput } from 'components/common';\nimport type { LookupTableCache, LookupTableCacheConfig } from 'logic/lookup-tables/types';\n\ntype Props = {\n config: LookupTableCacheConfig,\n};\n\nconst CaffeineCacheFieldSet = ({ config }: Props, ref: any) => {\n const { values, setValues, errors }: { values: Partial, setValues: any, errors: any } = useFormikContext();\n const [stateConfig, setStateConfig] = React.useState({ ...config });\n\n React.useEffect(() => setStateConfig({ ...config }), [config]);\n\n const validateConfig = () => {\n const configErrors: any = {};\n\n if (!values.config.max_size) configErrors.max_size = 'Required';\n if (values.config.max_size < 0) configErrors.max_size = 'Must be 0 or a positive number';\n\n return configErrors;\n };\n\n React.useImperativeHandle(ref, () => ({\n validate: () => (validateConfig()),\n }));\n\n const handleUpdate = (name: string) => (value: number, unit: string, enabled: boolean) => {\n const auxConfig = { ...stateConfig };\n const auxValConfig = { ...values.config };\n\n auxConfig[name] = enabled ? value : 0;\n auxConfig[`${name}_unit`] = unit;\n auxValConfig[name] = enabled ? value : 0;\n auxValConfig[`${name}_unit`] = unit;\n\n setStateConfig(auxConfig);\n setValues({ ...values, config: auxValConfig });\n };\n\n return (\n
\n \n 0}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n 0}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n
\n );\n};\n\nexport default React.forwardRef(CaffeineCacheFieldSet);\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 styled from 'styled-components';\n\nexport const SummaryContainer = styled.div`\n display: inline-block;\n margin: 16px 0;\n`;\n\nexport const SummaryRow = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n`;\n\nexport const Title = styled.span`\n font-weight: bold;\n min-width: 180px;\n`;\n\nexport const Value = styled.span`\n padding: 6px 10px;\n width: 100%;\n min-width: 130px;\n`;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { TimeUnit } from 'components/common';\nimport type { LookupTableCache } from 'logic/lookup-tables/types';\n\nimport {\n SummaryContainer,\n SummaryRow,\n Title,\n Value,\n} from './SummaryComponents.styled';\n\ntype Props = {\n cache: LookupTableCache,\n};\n\nconst CaffeineCacheSummary = ({ cache }: Props) => (\n \n \n Maximum entries:\n {cache.config.max_size}\n \n \n Expire after access:\n \n \n \n \n \n Expire after write:\n \n \n \n \n \n);\n\nexport default CaffeineCacheSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n\nimport React from 'react';\n\nimport { Alert } from 'components/bootstrap';\n\nconst CaffeineCacheDocumentation = () => (\n
\n

The in-memory cache maintains recently used values from data adapters.

\n

Please make sure your Graylog servers have enough heap to accomodate the cached entries and monitor the cache efficiency.

\n\n \n

The cache is local to each Graylog server, they do not share the entries.

\n

For example, if you have two servers, they will maintain a completely independent cache from each other.

\n
\n\n
\n\n

Cache size

\n

Every cache has a maximum number of entries, unbounded caches are not supported.

\n\n

Time-based expiration

\n\n
Expire after access
\n

\n The cache will remove entries after a fixed time since they have been used the last time.
\n This results in the cache behaving as a space limited least recently used cache.\n

\n\n
Expire after write
\n

\n The cache will remove entries after a fixed time since they have been entered into the cache.
\n This results in entries that are never older than the given time, which can be important for\n regularly changing data, such as configuration state of external systems.\n

\n\n
\n);\n\nexport default CaffeineCacheDocumentation;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\n\nimport NullCacheFieldSet from './NullCacheFieldSet';\nimport NullCacheSummary from './NullCacheSummary';\nimport CaffeineCacheFieldSet from './CaffeineCacheFieldSet';\nimport CaffeineCacheSummary from './CaffeineCacheSummary';\nimport CaffeineCacheDocumentation from './CaffeineCacheDocumentation';\n\nPluginStore.register(new PluginManifest({}, {\n lookupTableCaches: [\n {\n type: 'none',\n displayName: 'Do not cache values',\n formComponent: NullCacheFieldSet,\n summaryComponent: NullCacheSummary,\n documentationComponent: null,\n },\n {\n type: 'guava_cache', // old name kept for backwards compatibility\n displayName: 'Node-local, in-memory cache',\n formComponent: CaffeineCacheFieldSet,\n summaryComponent: CaffeineCacheSummary,\n documentationComponent: CaffeineCacheDocumentation,\n },\n ],\n}));\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { Link } from 'components/common/router';\nimport { Spinner } from 'components/common';\nimport Routes from 'routing/Routes';\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { ErrorPopover } from 'components/lookup-tables';\nimport { LookupTablesActions } from 'stores/lookup-tables/LookupTablesStore';\nimport useScopePermissions from 'hooks/useScopePermissions';\nimport type { LookupTable, LookupTableCache, LookupTableAdapter } from 'logic/lookup-tables/types';\nimport useHistory from 'routing/useHistory';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\ntype Props = {\n table: LookupTable,\n cache: LookupTableCache,\n dataAdapter: LookupTableAdapter,\n errors?: {\n table: string,\n cache: string,\n dataAdapter: string,\n },\n};\n\nconst Actions = styled(ButtonToolbar)`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst LUTTableEntry = ({ table, cache, dataAdapter, errors }: Props) => {\n const history = useHistory();\n const sendTelemetry = useSendTelemetry();\n\n const { loadingScopePermissions, scopePermissions } = useScopePermissions(table);\n\n const handleDelete = React.useCallback(() => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.LUT.DELETED, {\n app_pathname: 'lut',\n app_section: 'lut',\n });\n\n // eslint-disable-next-line no-alert\n const shouldDelete = window.confirm(\n `Are you sure you want to delete lookup table \"${table.title}\"?`,\n );\n\n if (shouldDelete) {\n LookupTablesActions.delete(table.id).then(() => {\n LookupTablesActions.reloadPage();\n });\n }\n }, [table.id, table.title, sendTelemetry]);\n\n const handleEdit = React.useCallback(() => {\n history.push(Routes.SYSTEM.LOOKUPTABLES.edit(table.name));\n }, [history, table.name]);\n\n return (\n \n \n \n {errors.table && (\n \n )}\n {table.title}\n \n {table.description}\n {table.name}\n \n {errors.cache && (\n \n )}\n {cache.title}\n \n \n {errors.dataAdapter && (\n \n )}\n {dataAdapter.title}\n \n \n {loadingScopePermissions ? : scopePermissions.is_mutable && (\n \n \n \n \n )}\n \n \n \n );\n};\n\nLUTTableEntry.defaultProps = {\n errors: {\n table: null,\n cache: null,\n dataAdapter: null,\n },\n};\n\nexport default LUTTableEntry;\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./Overview.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./Overview.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n OverlayTrigger,\n PaginatedList,\n SearchForm,\n Icon,\n Spinner,\n NoSearchResult,\n NoEntitiesExist,\n} from 'components/common';\nimport { Row, Col, Table, Popover, Button } from 'components/bootstrap';\nimport LUTTableEntry from 'components/lookup-tables/LUTTableEntry';\nimport withPaginationQueryParameter from 'components/common/withPaginationQueryParameter';\nimport { LookupTablesActions } from 'stores/lookup-tables/LookupTablesStore';\nimport type { LookupTable, LookupTableAdapter, LookupTableCache, PaginationType } from 'logic/lookup-tables/types';\nimport type { PaginationQueryParameterResult } from 'hooks/usePaginationQueryParameter';\n\nimport Styles from './Overview.css';\n\nconst ScrollContainer = styled.div`\n overflow-x: auto;\n`;\n\nconst buildHelpPopover = () => (\n \n

Available search fields

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FieldDescription
idLookup Table ID
titleThe title of the lookup table
nameThe reference name of the lookup table
descriptionThe description of lookup table
\n

Examples

\n

\n Find lookup tables by parts of their names:
\n name:geoip
\n name:geo\n

\n

\n Searching without a field name matches against the title field:
\n geoip
is the same as
\n title:geoip\n

\n
\n);\n\nconst queryHelpComponent = (\n \n \n \n);\n\ntype ItemProps = {\n table: LookupTable,\n caches: LookupTableCache[],\n dataAdapters: LookupTableAdapter[],\n errorStates: { [key: string]: { [key: string]: string } },\n};\n\nconst LUTItem = ({ table, caches, dataAdapters, errorStates }: ItemProps) => {\n const lookupName = (id: string, map: LookupTableCache[] | LookupTableAdapter[]) => {\n const empty = { title: 'none' };\n\n if (!map) return empty;\n\n return map[id] || empty;\n };\n\n const lookupAdapterError = () => {\n if (errorStates.dataAdapters && dataAdapters) {\n const adapter = dataAdapters[table.data_adapter_id];\n\n if (!adapter) return null;\n\n return errorStates.dataAdapters[adapter.name];\n }\n\n return null;\n };\n\n const cache = lookupName(table.cache_id, caches);\n const dataAdapter = lookupName(table.data_adapter_id, dataAdapters);\n const errors = {\n table: errorStates.tables[table.name],\n cache: null,\n dataAdapter: lookupAdapterError(),\n };\n\n return (\n \n );\n};\n\nconst NoResults = ({ query }: { query: string }) => (\n \n \n \n {query\n ? No tables found with title "{query}"\n : There are no data adapters to list}\n \n \n \n);\n\nconst DataRow = ({\n tables,\n caches,\n dataAdapters,\n query,\n errorStates,\n}: {\n tables: LookupTable[],\n caches: LookupTableCache[],\n dataAdapters: LookupTableAdapter[],\n query: string,\n errorStates: { [key: string]: { [key: string]: string } },\n}) => (tables.length > 0\n ? (\n <>\n {tables.map((table: LookupTable) => (\n \n ))}\n \n ) : (\n \n ));\n\ntype Props = {\n tables: LookupTable[],\n caches: LookupTableCache[],\n dataAdapters: LookupTableAdapter[],\n pagination: PaginationType,\n errorStates: { [key: string]: { [key: string]: string } },\n paginationQueryParameter: PaginationQueryParameterResult,\n};\n\nconst LookupTablesOverview = ({\n tables,\n caches,\n dataAdapters,\n pagination,\n errorStates,\n paginationQueryParameter,\n}: Props) => {\n const [loading, setLoading] = React.useState(false);\n const [localPagination, setLocalPagination] = React.useState({\n currentPage: paginationQueryParameter.page || 1,\n currentPageSize: paginationQueryParameter.pageSize || 10,\n currentQuery: pagination.query ? decodeURI(pagination.query) : '',\n resetPage: paginationQueryParameter.resetPage,\n setPagination: paginationQueryParameter.setPagination,\n });\n\n React.useEffect(() => {\n const { currentPage, currentPageSize, currentQuery } = localPagination;\n\n LookupTablesActions.searchPaginated(currentPage, currentPageSize, currentQuery)\n .then(() => setLoading(false));\n }, [localPagination]);\n\n const onPageChange = React.useCallback((newPage: number, newPerPage: number) => {\n setLocalPagination({ ...localPagination, currentPage: newPage, currentPageSize: newPerPage });\n }, [localPagination]);\n\n const onSearch = React.useCallback((query: string) => {\n localPagination.resetPage();\n localPagination.setPagination({ page: 1, pageSize: localPagination.currentPageSize });\n setLocalPagination({ ...localPagination, currentPage: 1, currentQuery: query });\n }, [localPagination]);\n\n const onReset = React.useCallback(() => {\n localPagination.resetPage();\n localPagination.setPagination({ page: 1, pageSize: localPagination.currentPageSize });\n setLocalPagination({ ...localPagination, currentPage: 1, currentQuery: '' });\n }, [localPagination]);\n\n return (\n \n \n

\n Configured lookup tables {pagination.total} total\n

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {loading ? : (\n \n )}\n
TitleDescriptionNameCacheData AdapterActions
\n
\n
\n \n
\n );\n};\n\nexport default withPaginationQueryParameter(LookupTablesOverview);\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 { useNavigate } from 'react-router-dom';\n\nimport Routes from 'routing/Routes';\nimport { ButtonToolbar, Row, Col, Button, Input } from 'components/bootstrap';\nimport { Link } from 'components/common/router';\nimport { LookupTablesActions } from 'stores/lookup-tables/LookupTablesStore';\nimport useScopePermissions from 'hooks/useScopePermissions';\nimport type { LookupTable, LookupTableCache, LookupTableAdapter } from 'logic/lookup-tables/types';\n\ntype Props = {\n table: LookupTable,\n cache: LookupTableCache,\n dataAdapter: LookupTableAdapter,\n};\n\ntype InputType = { value: string, valid: boolean };\nconst INIT_INPUT = { value: '', valid: false };\n\nconst LookupTableView = ({ table, cache, dataAdapter }: Props) => {\n const navigate = useNavigate();\n const { loadingScopePermissions, scopePermissions } = useScopePermissions(table);\n const [purgeKey, setPurgeKey] = React.useState(INIT_INPUT);\n const [lookupKey, setLookupKey] = React.useState(INIT_INPUT);\n const [lookupResult, setLookupResult] = React.useState(null);\n\n const handleEdit = (tableName: string) => () => {\n navigate(Routes.SYSTEM.LOOKUPTABLES.edit(tableName));\n };\n\n const handleInputOnChange = (event: React.BaseSyntheticEvent) => {\n const newValue = event.target.name === 'purgekey' ? { ...purgeKey } : { ...lookupKey };\n\n newValue.valid = event.target.value\n && event.target.value.replace(/\\s/g, '').length > 0;\n\n newValue.value = event.target.value;\n\n switch (event.target.name) {\n case 'purgekey':\n setPurgeKey(newValue);\n break;\n case 'lookupkey':\n setLookupKey(newValue);\n setLookupResult(null);\n break;\n default:\n break;\n }\n };\n\n const handlePurgeKey = (event: React.SyntheticEvent) => {\n event.preventDefault();\n\n if (purgeKey.valid) {\n LookupTablesActions.purgeKey(table, purgeKey.value).then(() => {\n setPurgeKey(INIT_INPUT);\n });\n }\n };\n\n const hadlePurgeAll = (event: React.SyntheticEvent) => {\n event.preventDefault();\n LookupTablesActions.purgeAll(table);\n };\n\n const handleLookupKey = (event: React.SyntheticEvent) => {\n event.preventDefault();\n\n if (lookupKey.valid) {\n LookupTablesActions.lookup(table.name, lookupKey.value).then((resp: any) => {\n setLookupResult(JSON.stringify(resp, null, 2));\n setLookupKey(INIT_INPUT);\n });\n }\n };\n\n return (\n \n \n

{table.title}

\n

{table.description}

\n
\n
Data adapter
\n
\n \n {dataAdapter.title}\n \n
\n
Cache
\n
\n {cache.title}\n
\n
\n {(!loadingScopePermissions && scopePermissions?.is_mutable) && (\n \n )}\n {(table.default_single_value || table.default_multi_value) && (\n
\n
Default single value
\n
{table.default_single_value}{' '}({table.default_single_value_type.toLowerCase()})
\n
Default multi value
\n
{table.default_multi_value}{' '}({table.default_multi_value_type.toLowerCase()})
\n
\n )}\n
\n

Purge Cache

\n

You can purge the complete cache for this lookup table or only the cache entry for a single key.

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

Test lookup

\n

You can manually query the lookup table using this form. The data will be cached as configured by Graylog.

\n
\n
\n \n \n
\n
\n {lookupResult && (\n
\n

Lookup result

\n
{lookupResult}
\n
\n )}\n \n
\n );\n};\n\nexport default LookupTableView;\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 { Formik, Form } from 'formik';\nimport PropTypes from 'prop-types';\nimport _omit from 'lodash/omit';\nimport type { LookupTable } from 'src/logic/lookup-tables/types';\n\nimport { LookupTablesActions } from 'stores/lookup-tables/LookupTablesStore';\nimport { Col, Row, Input } from 'components/bootstrap';\nimport { FormikFormGroup, JSONValueInput, FormSubmit } from 'components/common';\nimport { CachesContainer, CachePicker, DataAdaptersContainer, DataAdapterPicker } from 'components/lookup-tables';\nimport useScopePermissions from 'hooks/useScopePermissions';\nimport Routes from 'routing/Routes';\nimport useHistory from 'routing/useHistory';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\ntype LookupTableType = LookupTable & {\n enable_single_value: boolean,\n enable_multi_value: boolean,\n}\n\nconst INIT_TABLE_VALUES: LookupTableType = {\n id: undefined,\n title: '',\n description: '',\n name: '',\n cache_id: undefined,\n data_adapter_id: undefined,\n enable_single_value: false,\n default_single_value: '',\n default_single_value_type: 'NULL',\n enable_multi_value: false,\n default_multi_value: '',\n default_multi_value_type: 'NULL',\n content_pack: null,\n};\n\ntype Props = {\n saved: () => void,\n create: boolean,\n table: LookupTableType,\n};\n\nconst LookupTableForm = ({ saved, create, table }: Props) => {\n const { loadingScopePermissions, scopePermissions } = useScopePermissions(table);\n const history = useHistory();\n const sendTelemetry = useSendTelemetry();\n\n const validate = (values: LookupTableType) => {\n const errors = {};\n const requiredFields: (keyof LookupTableType)[] = [\n 'title',\n 'name',\n 'cache_id',\n 'data_adapter_id',\n 'cache_id',\n 'default_single_value',\n 'default_multi_value',\n ];\n\n requiredFields.forEach((requiredField) => {\n if (!values[requiredField]) {\n if (requiredField === 'default_single_value' && !values.enable_single_value) return;\n if (requiredField === 'default_multi_value' && !values.enable_multi_value) return;\n errors[requiredField] = 'Required';\n }\n });\n\n return errors;\n };\n\n const handleSubmit = (values: LookupTableType) => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.LUT[create ? 'CREATED' : 'UPDATED'], {\n app_pathname: 'lut',\n app_section: 'lut',\n });\n\n let promise: Promise;\n\n const valuesToSave: LookupTable = _omit(values, ['enable_single_value', 'enable_multi_value']);\n\n if (create) {\n promise = LookupTablesActions.create(valuesToSave);\n } else {\n promise = LookupTablesActions.update(valuesToSave);\n }\n\n return promise.then(() => {\n saved();\n });\n };\n\n const initialValues: LookupTableType = {\n ...INIT_TABLE_VALUES,\n ...table,\n enable_single_value: table.default_single_value !== '',\n enable_multi_value: table.default_multi_value !== '',\n };\n\n const onCancel = () => history.push(Routes.SYSTEM.LOOKUPTABLES.OVERVIEW);\n const updatable = !create && !loadingScopePermissions && scopePermissions?.is_mutable;\n\n return (\n {\n const errors = await formikHelpers.validateForm();\n\n if (Object.keys(errors).length === 0) {\n return handleSubmit(values);\n }\n\n return Promise.resolve();\n }}>\n {({ values, errors, touched, setFieldValue, setFieldTouched, setValues, isSubmitting }) => (\n
\n
\n \n\n \n\n \n\n {\n setFieldValue('enable_single_value', !values.enable_single_value);\n\n if (values.enable_single_value) {\n setFieldValue('default_single_value', '');\n setFieldValue('default_single_value_type', 'NULL');\n }\n }} />\n {values.enable_single_value && (\n setFieldTouched('default_single_value', true)}\n update={(value, valueType) => {\n setValues({\n ...values,\n default_single_value: value,\n default_single_value_type: valueType,\n });\n }}\n value={values.default_single_value}\n valueType={values.default_single_value_type || 'NULL'}\n allowedTypes={['STRING', 'NUMBER', 'BOOLEAN', 'NULL']}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n )}\n\n {\n setFieldValue('enable_multi_value', !values.enable_multi_value);\n\n if (values.enable_multi_value) {\n setFieldValue('default_multi_value', '');\n setFieldValue('default_multi_value_type', 'NULL');\n }\n }} />\n {values.enable_multi_value && (\n setFieldTouched('default_multi_value', true)}\n update={(value, valueType) => {\n setValues({\n ...values,\n default_multi_value: value,\n default_multi_value_type: valueType,\n });\n }}\n value={values.default_multi_value}\n valueType={values.default_multi_value_type || 'NULL'}\n allowedTypes={['OBJECT', 'NULL']}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n )}\n
\n\n \n \n \n\n \n \n \n\n
\n \n \n {create && (\n \n )}\n {updatable && (\n \n )}\n \n \n
\n
\n )}\n
\n );\n};\n\nLookupTableForm.propTypes = {\n saved: PropTypes.func.isRequired,\n create: PropTypes.bool,\n table: PropTypes.object,\n};\n\nLookupTableForm.defaultProps = {\n create: true,\n table: INIT_TABLE_VALUES,\n};\n\nexport default LookupTableForm;\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 { LookupTableForm } from 'components/lookup-tables';\n\nclass LookupTableCreate extends React.Component {\n static propTypes = {\n saved: PropTypes.func.isRequired,\n validate: PropTypes.func,\n validationErrors: PropTypes.object,\n };\n\n static defaultProps = {\n validate: null,\n validationErrors: {},\n };\n\n state = {\n table: undefined,\n };\n\n render() {\n return (\n
\n \n \n \n \n \n
\n );\n }\n}\n\nexport default LookupTableCreate;\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 from 'styled-components';\n\nimport useHistory from 'routing/useHistory';\nimport { Link } from 'components/common/router';\nimport { Spinner } from 'components/common';\nimport { Button } from 'components/bootstrap';\nimport Routes from 'routing/Routes';\nimport { MetricsMapper, MetricContainer, CounterRate } from 'components/metrics';\nimport NumberUtils from 'util/NumberUtils';\nimport { LookupTableCachesActions } from 'stores/lookup-tables/LookupTableCachesStore';\nimport type { LookupTableCache } from 'logic/lookup-tables/types';\nimport useScopePermissions from 'hooks/useScopePermissions';\nimport ButtonToolbar from 'components/bootstrap/ButtonToolbar';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\ntype Props = {\n cache: LookupTableCache,\n};\n\nconst Actions = styled(ButtonToolbar)`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst CacheTableEntry = ({ cache }: Props) => {\n const history = useHistory();\n const { loadingScopePermissions, scopePermissions } = useScopePermissions(cache);\n const sendTelemetry = useSendTelemetry();\n\n const countMap = {\n requests: `org.graylog2.lookup.caches.${cache.id}.requests`,\n hits: `org.graylog2.lookup.caches.${cache.id}.hits`,\n misses: `org.graylog2.lookup.caches.${cache.id}.misses`,\n };\n\n const entriesMap = {\n count: `org.graylog2.lookup.caches.${cache.id}.entries`,\n };\n\n const computeEntriesMetrics = (metrics: any) => {\n const total = Object.keys(metrics).reduce((acc: number, nodeId: string) => (\n acc + (Number.isNaN(metrics[nodeId].count.metric.value) ? 0 : metrics[nodeId].count.metric.value)\n ), 0);\n\n if (total < 0) return 'N/A';\n\n return NumberUtils.formatNumber(total);\n };\n\n const computeCountMetrics = (metrics: any) => {\n const totalHits = Object.keys(metrics).reduce((acc: number, nodeId: string) => (\n acc + (Number.isNaN(metrics[nodeId].hits.metric.rate.total) ? 0 : metrics[nodeId].hits.metric.rate.total)\n ), 0);\n\n const totalMisses = Object.keys(metrics).reduce((acc: number, nodeId: string) => (\n acc + (Number.isNaN(metrics[nodeId].misses.metric.rate.total) ? 0 : metrics[nodeId].misses.metric.rate.total)\n ), 0);\n\n const total = totalHits + totalMisses;\n if (total < 1) return 'N/A';\n const hitRate = (totalHits * 100.0) / total;\n\n return `${NumberUtils.formatNumber(hitRate)}%`;\n };\n\n const handleEdit = React.useCallback(() => {\n history.push(Routes.SYSTEM.LOOKUPTABLES.CACHES.edit(cache.name));\n }, [history, cache.name]);\n\n const handleDelete = React.useCallback(() => {\n // eslint-disable-next-line no-alert\n const shouldDelete = window.confirm(`Are you sure you want to delete cache \"${cache.title}\"?`);\n\n if (shouldDelete) {\n LookupTableCachesActions.delete(cache.id).then(() => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.LUT.CACHE_DELETED, {\n app_pathname: 'lut',\n app_section: 'lut_cache',\n });\n\n LookupTableCachesActions.reloadPage();\n });\n }\n }, [cache.title, cache.id, sendTelemetry]);\n\n return (\n \n \n \n {cache.title}\n \n {cache.description}\n {cache.name}\n \n \n \n \n \n \n \n \n \n \n \n \n {loadingScopePermissions ? : scopePermissions.is_mutable && (\n \n \n \n \n )}\n \n \n \n );\n};\n\nexport default CacheTableEntry;\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 styled from 'styled-components';\n\nimport {\n OverlayTrigger,\n PaginatedList,\n SearchForm,\n Spinner,\n Icon,\n NoSearchResult,\n NoEntitiesExist,\n} from 'components/common';\nimport { Row, Col, Table, Popover, Button } from 'components/bootstrap';\nimport CacheTableEntry from 'components/lookup-tables/CacheTableEntry';\nimport withPaginationQueryParameter from 'components/common/withPaginationQueryParameter';\nimport { LookupTableCachesActions } from 'stores/lookup-tables/LookupTableCachesStore';\nimport type { LookupTableCache, PaginationType } from 'logic/lookup-tables/types';\nimport type { PaginationQueryParameterResult } from 'hooks/usePaginationQueryParameter';\n\nimport Styles from './Overview.css';\n\nconst ScrollContainer = styled.div`\n overflow-x: auto;\n`;\n\nconst buildHelpPopover = () => (\n \n

Available search fields

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FieldDescription
idCache ID
titleThe title of the cache
nameThe reference name of the cache
descriptionThe description of cache
\n

Examples

\n

\n Find caches by parts of their names:
\n name:guava
\n name:gua\n

\n

\n Searching without a field name matches against the title field:
\n guava
is the same as
\n title:guava\n

\n
\n);\n\nconst NoResults = ({ query }: { query: string }) => (\n \n \n \n {query\n ? No caches found with title "{query}"\n : There are no caches to list}\n \n \n \n);\n\nconst DataRow = ({ caches, query }: { caches: LookupTableCache[], query: string }) => (caches.length > 0\n ? (\n <>\n {caches.map((cache: LookupTableCache) => (\n \n ))}\n \n ) : (\n \n ));\n\ntype Props = {\n caches: LookupTableCache[],\n pagination: PaginationType,\n paginationQueryParameter: PaginationQueryParameterResult,\n};\n\nconst queryHelpComponent = (\n \n \n \n);\n\nconst CachesOverview = ({ caches, pagination, paginationQueryParameter }: Props) => {\n const [loading, setLoading] = React.useState(false);\n const [localPagination, setLocalPagination] = React.useState({\n currentPage: paginationQueryParameter.page || 1,\n currentPageSize: paginationQueryParameter.pageSize || 10,\n currentQuery: pagination.query ? decodeURI(pagination.query) : '',\n resetPage: paginationQueryParameter.resetPage,\n setPagination: paginationQueryParameter.setPagination,\n });\n\n React.useEffect(() => {\n const { currentPage, currentPageSize, currentQuery } = localPagination;\n\n LookupTableCachesActions.searchPaginated(currentPage, currentPageSize, currentQuery)\n .then(() => setLoading(false));\n }, [localPagination]);\n\n const onPageChange = React.useCallback((newPage: number, newPerPage: number) => {\n setLocalPagination({ ...localPagination, currentPage: newPage, currentPageSize: newPerPage });\n }, [localPagination]);\n\n const onSearch = React.useCallback((query: string) => {\n localPagination.resetPage();\n localPagination.setPagination({ page: 1, pageSize: localPagination.currentPageSize });\n setLocalPagination({ ...localPagination, currentPage: 1, currentQuery: query });\n }, [localPagination]);\n\n const onReset = React.useCallback(() => {\n localPagination.resetPage();\n localPagination.setPagination({ page: 1, pageSize: localPagination.currentPageSize });\n setLocalPagination({ ...localPagination, currentPage: 1, currentQuery: '' });\n }, [localPagination]);\n\n return (\n \n \n

\n Configured lookup Caches {pagination.total} total\n

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {loading ? : (\n \n )}\n
TitleDescriptionNameEntriesHit rateThroughputActions
\n
\n
\n \n
\n );\n};\n\nexport default withPaginationQueryParameter(CachesOverview);\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 { useNavigate } from 'react-router-dom';\n\nimport usePluginEntities from 'hooks/usePluginEntities';\nimport Routes from 'routing/Routes';\nimport { Row, Col, Button } from 'components/bootstrap';\nimport useScopePermissions from 'hooks/useScopePermissions';\nimport type { LookupTableCache } from 'logic/lookup-tables/types';\n\nimport type { CachePluginType } from './types';\nimport {\n SummaryContainer,\n SummaryRow,\n Title,\n Value,\n} from './caches/SummaryComponents.styled';\n\ntype Props = {\n cache: LookupTableCache,\n};\n\nconst Cache = ({ cache }: Props) => {\n const navigate = useNavigate();\n const { loadingScopePermissions, scopePermissions } = useScopePermissions(cache);\n const plugin = usePluginEntities('lookupTableCaches').find((p: CachePluginType) => p.type === cache.config?.type);\n\n if (!plugin) {\n return

Unknown cache type {cache.config.type}. Is the plugin missing?

;\n }\n\n const handleEdit = (cacheName: string) => () => {\n navigate(Routes.SYSTEM.LOOKUPTABLES.CACHES.edit(cacheName));\n };\n\n return (\n \n \n

{cache.title} ({plugin.displayName})

\n \n \n Description:\n {cache.description || No description.}\n \n \n

Configuration

\n
{React.createElement(plugin.summaryComponent, { cache: cache })}
\n {(!loadingScopePermissions && scopePermissions?.is_mutable) && (\n \n )}\n \n
\n );\n};\n\nexport default Cache;\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 isEmpty from 'lodash/isEmpty';\nimport { Formik, Form } from 'formik';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport type { LookupTableCache, validationErrorsType } from 'src/logic/lookup-tables/types';\n\nimport { Col, Row } from 'components/bootstrap';\nimport { FormikFormGroup, FormSubmit } from 'components/common';\nimport { LookupTableCachesActions } from 'stores/lookup-tables/LookupTableCachesStore';\nimport useScopePermissions from 'hooks/useScopePermissions';\nimport Routes from 'routing/Routes';\nimport useHistory from 'routing/useHistory';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\ntype TitleProps = {\n title: string,\n typeName: string,\n create: boolean,\n};\n\nconst Title = ({ title, typeName, create }: TitleProps) => {\n const TagName = create ? 'h3' : 'h2';\n\n return (\n \n {title} ({typeName})\n \n );\n};\n\nconst INIT_CACHE: LookupTableCache = {\n id: undefined,\n title: '',\n description: '',\n name: '',\n config: {},\n};\n\ntype Props = {\n type: string,\n saved: () => void,\n title: string,\n create?: boolean,\n cache?: LookupTableCache,\n validate?: (arg: LookupTableCache) => void,\n validationErrors?: validationErrorsType,\n};\n\nconst CacheForm = ({ type, saved, title, create, cache, validate, validationErrors }: Props) => {\n const configRef = React.useRef(null);\n const [generateName, setGenerateName] = React.useState(create);\n const { loadingScopePermissions, scopePermissions } = useScopePermissions(cache);\n const sendTelemetry = useSendTelemetry();\n\n const plugin = React.useMemo(() => PluginStore.exports('lookupTableCaches').find((p) => p.type === type), [type]);\n\n const pluginName = React.useMemo(() => (plugin.displayName || type), [plugin, type]);\n const DocComponent = React.useMemo(() => (plugin.documentationComponent), [plugin]);\n const configFieldSet = React.useMemo(() => {\n if (plugin) {\n return React.createElement(\n plugin.formComponent, { config: cache.config, ref: configRef },\n );\n }\n\n return null;\n }, [plugin, cache.config]);\n\n const sanitizeName = (inName: string) => inName.trim().replace(/\\W+/g, '-').toLocaleLowerCase();\n\n const handleTitleChange = (values: LookupTableCache, setValues: any) => (event: React.BaseSyntheticEvent) => {\n if (!generateName) return;\n const safeName = sanitizeName(event.target.value);\n\n setValues({\n ...values,\n title: event.target.value,\n name: safeName,\n });\n };\n\n const handleValidation = (values: LookupTableCache) => {\n const errors: any = {};\n\n if (!values.title) errors.title = 'Required';\n\n if (!values.name) {\n errors.name = 'Required';\n } else {\n validate(values);\n }\n\n if (values.config.type !== 'none') {\n const confErrors = configRef.current?.validate() || {};\n if (!isEmpty(confErrors)) errors.config = confErrors;\n }\n\n return errors;\n };\n\n const handleSubmit = (values: LookupTableCache) => {\n const promise = create\n ? LookupTableCachesActions.create(values)\n : LookupTableCachesActions.update(values);\n\n return promise.then(() => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.LUT[create ? 'CACHE_CREATED' : 'CACHE_UPDATED'], {\n app_pathname: 'lut',\n app_section: 'lut_cache',\n event_details: {\n type: values?.config?.type,\n },\n });\n\n saved();\n });\n };\n\n const history = useHistory();\n const onCancel = () => history.push(Routes.SYSTEM.LOOKUPTABLES.CACHES.OVERVIEW);\n const updatable = !create && !loadingScopePermissions && scopePermissions?.is_mutable;\n\n return (\n <>\n \n <Row>\n <Col lg={6} style={{ marginTop: 10 }}>\n <Formik initialValues={{ ...INIT_CACHE, ...cache }}\n validate={handleValidation}\n validateOnBlur\n validateOnChange={false}\n validateOnMount={!create}\n onSubmit={handleSubmit}\n enableReinitialize>\n {({ errors, values, setValues, isSubmitting }) => (\n <Form className=\"form form-horizontal\">\n <fieldset>\n <FormikFormGroup type=\"text\"\n name=\"title\"\n label=\"* Title\"\n required\n help={errors.title ? null : 'A short title for this cache.'}\n onChange={handleTitleChange(values, setValues)}\n autoFocus\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n <FormikFormGroup type=\"text\"\n name=\"description\"\n label=\"Description\"\n help=\"Cache description.\"\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n <FormikFormGroup type=\"text\"\n name=\"name\"\n label=\"* Name\"\n required\n error={validationErrors.name ? validationErrors.name[0] : null}\n onChange={() => setGenerateName(false)}\n help={\n (errors.name || validationErrors.name)\n ? null\n : 'The name that is being used to refer to this cache. Must be unique.'\n }\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n\n </fieldset>\n {configFieldSet}\n <fieldset>\n <Row>\n <Col mdOffset={3} sm={12}>\n {create && (\n <FormSubmit submitButtonText=\"Create cache\"\n submitLoadingText=\"Creating cache...\"\n isSubmitting={isSubmitting}\n isAsyncSubmit\n onCancel={onCancel} />\n )}\n {updatable && (\n <FormSubmit submitButtonText=\"Update cache\"\n submitLoadingText=\"Updating cache...\"\n isAsyncSubmit\n isSubmitting={isSubmitting}\n onCancel={onCancel} />\n )}\n </Col>\n </Row>\n </fieldset>\n </Form>\n )}\n </Formik>\n </Col>\n <Col lg={6} style={{ marginTop: 10 }}>{DocComponent ? <DocComponent /> : null}</Col>\n </Row>\n </>\n );\n};\n\nCacheForm.defaultProps = {\n create: true,\n cache: INIT_CACHE,\n validate: null,\n validationErrors: {},\n};\n\nexport default CacheForm;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport * as React from 'react';\nimport type { LookupTableCache, validationErrorsType } from 'src/logic/lookup-tables/types';\n\nimport usePluginEntities from 'hooks/usePluginEntities';\nimport { Row, Col, Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\n\nimport CacheForm from './CacheForm';\nimport type { CachePluginType } from './types';\n\nconst INIT_CACHE: LookupTableCache = {\n id: null,\n title: '',\n name: '',\n description: '',\n config: { type: 'none' },\n};\n\ntype TypesType = { type?: string, lable?: string };\ntype cacheTypeOptionsType = { value: string, label: string }\n\ntype Props = {\n saved: () => void,\n types: TypesType[],\n validate: () => void,\n validationErrors: validationErrorsType,\n};\n\nconst CacheCreate = ({ saved, types, validate, validationErrors }: Props) => {\n const [type, setType] = React.useState<string>(null);\n const cachePlugins = usePluginEntities('lookupTableCaches');\n\n const plugins = React.useMemo(() => (\n cachePlugins.reduce((acc: any, plugin: CachePluginType) => {\n acc[plugin.type] = plugin;\n\n return acc;\n }, {})\n ), [cachePlugins]);\n\n const cacheTypes = React.useMemo(() => (\n Object.values(types)\n .map((inType: TypesType) => ({ value: inType.type, label: plugins[inType.type].displayName }))\n .sort((a: cacheTypeOptionsType, b: cacheTypeOptionsType) => naturalSort(a.label.toLowerCase(), b.label.toLowerCase()))\n ), [types, plugins]);\n\n const cache = React.useMemo(() => {\n if (type) {\n return {\n ...INIT_CACHE,\n config: { ...types[type]?.default_config },\n };\n }\n\n return null;\n }, [type, types]);\n\n const handleSelect = (selectedType: string) => {\n setType(selectedType);\n };\n\n return (\n <>\n <Row className=\"content\">\n <Col lg={6} className=\"form form-horizontal\">\n <Input id=\"cache-type-select\"\n label=\"Cache Type\"\n required\n autoFocus\n help=\"The type of cache to configure.\"\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\">\n <Select placeholder=\"Select Cache Type\"\n clearable={false}\n options={cacheTypes}\n matchProp=\"label\"\n onChange={handleSelect}\n value={type} />\n </Input>\n </Col>\n </Row>\n {cache && (\n <Row className=\"content\">\n <Col lg={12}>\n <CacheForm cache={cache}\n type={type}\n title=\"Configure Cache\"\n create\n saved={saved}\n validationErrors={validationErrors}\n validate={validate} />\n </Col>\n </Row>\n )}\n </>\n );\n};\n\nexport default CacheCreate;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useField } from 'formik';\nimport type { LookupTableCache } from 'src/logic/lookup-tables/types';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\n\ntype Props = {\n caches: LookupTableCache[],\n}\n\nconst CachePicker = ({ caches }: Props) => {\n const [, { value, touched, error }, { setTouched, setValue }] = useField('cache_id');\n const sortedCaches = caches.map((cache) => ({ value: cache.id, label: `${cache.title} (${cache.name})` })).sort((a, b) => naturalSort(a.label.toLowerCase(), b.label.toLowerCase()));\n\n const errorMessage = touched ? error : '';\n\n return (\n <fieldset>\n <Input id=\"cache-select\"\n label=\"Cache\"\n required\n autoFocus\n bsStyle={errorMessage ? 'error' : undefined}\n help={errorMessage || 'Select an existing cache'}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\">\n <Select placeholder=\"Select a cache\"\n clearable={false}\n options={sortedCaches}\n matchProp=\"label\"\n onBlur={() => setTouched(true)}\n onChange={setValue}\n value={value} />\n </Input>\n </fieldset>\n );\n};\n\nCachePicker.propTypes = {\n caches: PropTypes.array,\n};\n\nCachePicker.defaultProps = {\n caches: [],\n};\n\nexport default CachePicker;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\n// eslint-disable-next-line\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Spinner } from 'components/common';\nimport { LookupTableCachesActions, LookupTableCachesStore } from 'stores/lookup-tables/LookupTableCachesStore';\n\nconst CachesContainer = createReactClass({\n // eslint-disable-next-line\n displayName: 'CachesContainer',\n\n // eslint-disable-next-line\n propTypes: {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]),\n },\n\n mixins: [Reflux.connect(LookupTableCachesStore)],\n\n getDefaultProps() {\n return {\n children: null,\n };\n },\n\n componentDidMount() {\n // TODO the 10k items is bad. we need a searchable/scrollable long list select box\n LookupTableCachesActions.searchPaginated(1, 10000, null);\n },\n\n render() {\n if (!this.state.caches) {\n return <Spinner />;\n }\n\n const childrenWithProps = React.Children.map(this.props.children,\n (child) => React.cloneElement(child,\n { caches: this.state.caches, pagination: this.state.pagination }));\n\n return <div>{childrenWithProps}</div>;\n },\n});\n\nexport default CachesContainer;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { Link } from 'components/common/router';\nimport { Spinner } from 'components/common';\nimport Routes from 'routing/Routes';\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { ErrorPopover } from 'components/lookup-tables';\nimport { MetricContainer, CounterRate } from 'components/metrics';\nimport { LookupTableDataAdaptersActions } from 'stores/lookup-tables/LookupTableDataAdaptersStore';\nimport type { LookupTableAdapter } from 'logic/lookup-tables/types';\nimport useScopePermissions from 'hooks/useScopePermissions';\nimport useHistory from 'routing/useHistory';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nconst Actions = styled(ButtonToolbar)`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n`;\n\ntype Props = {\n adapter: LookupTableAdapter,\n error: string,\n};\n\nconst DataAdapterTableEntry = ({ adapter, error = null }: Props) => {\n const history = useHistory();\n const { loadingScopePermissions, scopePermissions } = useScopePermissions(adapter);\n const sendTelemetry = useSendTelemetry();\n\n const { name: adapterName, title: adapterTitle, description: adapterDescription, id: adapterId } = adapter;\n\n const _onEdit = React.useCallback(() => {\n history.push(Routes.SYSTEM.LOOKUPTABLES.DATA_ADAPTERS.edit(adapterName));\n }, [history, adapterName]);\n\n const _onDelete = React.useCallback(() => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.LUT.DATA_ADAPTER_DELETED, {\n app_pathname: 'lut',\n app_section: 'lut_data_adapter',\n });\n\n // eslint-disable-next-line no-alert\n if (window.confirm(`Are you sure you want to delete data adapter \"${adapterTitle}\"?`)) {\n LookupTableDataAdaptersActions.delete(adapter.id).then(() => {\n LookupTableDataAdaptersActions.reloadPage();\n });\n }\n }, [adapterTitle, adapter.id, sendTelemetry]);\n\n return (\n <tbody>\n <tr>\n <td>\n {error && <ErrorPopover errorText={error} title=\"Lookup table problem\" placement=\"right\" />}\n <Link to={Routes.SYSTEM.LOOKUPTABLES.DATA_ADAPTERS.show(adapterName)}>{adapterTitle}</Link>\n </td>\n <td>{adapterDescription}</td>\n <td>{adapterName}</td>\n <td>\n <MetricContainer name={`org.graylog2.lookup.adapters.${adapterId}.requests`}>\n <CounterRate suffix=\"lookups/s\" />\n </MetricContainer>\n </td>\n <td>\n {loadingScopePermissions ? <Spinner /> : scopePermissions.is_mutable && (\n <Actions>\n <Button bsSize=\"xsmall\"\n onClick={_onEdit}\n role=\"button\"\n name=\"edit\">\n Edit\n </Button>\n <Button bsSize=\"xsmall\"\n bsStyle=\"danger\"\n onClick={_onDelete}\n role=\"button\"\n name=\"delete\">\n Delete\n </Button>\n </Actions>\n )}\n </td>\n </tr>\n </tbody>\n );\n};\n\nexport default DataAdapterTableEntry;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport { Row, Col, Table, Popover, Button } from 'components/bootstrap';\nimport {\n OverlayTrigger,\n PaginatedList,\n SearchForm,\n Spinner,\n Icon,\n NoSearchResult,\n NoEntitiesExist,\n} from 'components/common';\nimport DataAdapterTableEntry from 'components/lookup-tables/DataAdapterTableEntry';\nimport withPaginationQueryParameter from 'components/common/withPaginationQueryParameter';\nimport { LookupTableDataAdaptersActions } from 'stores/lookup-tables/LookupTableDataAdaptersStore';\nimport type { LookupTableAdapter, PaginationType } from 'logic/lookup-tables/types';\nimport type { PaginationQueryParameterResult } from 'hooks/usePaginationQueryParameter';\n\nimport Styles from './Overview.css';\n\nconst ScrollContainer = styled.div`\n overflow-x: auto;\n`;\n\nconst buildHelpPopover = () => (\n <Popover id=\"search-query-help\"\n className={Styles.popoverWide}\n title=\"Search Syntax Help\">\n <p><strong>Available search fields</strong></p>\n <Table condensed>\n <thead>\n <tr>\n <th>Field</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>id</td>\n <td>Data Adapter ID</td>\n </tr>\n <tr>\n <td>title</td>\n <td>The title of the data adapter</td>\n </tr>\n <tr>\n <td>name</td>\n <td>The reference name of the data adapter</td>\n </tr>\n <tr>\n <td>description</td>\n <td>The description of data adapter</td>\n </tr>\n </tbody>\n </Table>\n <p><strong>Example</strong></p>\n <p>\n Find data adapters by parts of their names:<br />\n <kbd>name:geoip</kbd><br />\n <kbd>name:geo</kbd>\n </p>\n <p>\n Searching without a field name matches against the <code>title</code> field:<br />\n <kbd>geoip</kbd> <br />is the same as<br />\n <kbd>title:geoip</kbd>\n </p>\n </Popover>\n);\n\nconst queryHelpComponent = (\n <OverlayTrigger trigger=\"click\" rootClose placement=\"right\" overlay={buildHelpPopover()}>\n <Button bsStyle=\"link\"\n className={Styles.searchHelpButton}>\n <Icon name=\"question-circle\" fixedWidth />\n </Button>\n </OverlayTrigger>\n);\n\nconst NoResults = ({ query }: { query: string }) => (\n <tbody>\n <tr>\n <td colSpan={5}>\n {query\n ? <NoSearchResult>No data adapters found with title "{query}"</NoSearchResult>\n : <NoEntitiesExist>There are no data adapters to list</NoEntitiesExist>}\n </td>\n </tr>\n </tbody>\n);\n\nconst DataRow = ({\n dataAdapters,\n query,\n errors,\n}: {\n dataAdapters: LookupTableAdapter[],\n query: string,\n errors: { [key: string]: string },\n}) => (dataAdapters.length > 0\n ? (\n <>\n {dataAdapters.map((dataAdapter: LookupTableAdapter) => (\n <DataAdapterTableEntry key={dataAdapter.id}\n adapter={dataAdapter}\n error={errors[dataAdapter.name]} />\n ))}\n </>\n ) : (\n <NoResults query={query} />\n ));\n\ntype Props = {\n dataAdapters: LookupTableAdapter[],\n pagination: PaginationType,\n errorStates: { [key: string]: { [key: string]: string } },\n paginationQueryParameter: PaginationQueryParameterResult,\n};\n\nconst DataAdaptersOverview = ({ dataAdapters, pagination, errorStates, paginationQueryParameter }: Props) => {\n const [loading, setLoading] = React.useState(false);\n const [localPagination, setLocalPagination] = React.useState({\n currentPage: paginationQueryParameter.page || 1,\n currentPageSize: paginationQueryParameter.pageSize || 10,\n currentQuery: pagination.query ? decodeURI(pagination.query) : '',\n resetPage: paginationQueryParameter.resetPage,\n setPagination: paginationQueryParameter.setPagination,\n });\n\n React.useEffect(() => {\n const { currentPage, currentPageSize, currentQuery } = localPagination;\n\n LookupTableDataAdaptersActions.searchPaginated(currentPage, currentPageSize, currentQuery)\n .then(() => setLoading(false));\n }, [localPagination]);\n\n const onPageChange = React.useCallback((newPage: number, newPerPage: number) => {\n setLocalPagination({ ...localPagination, currentPage: newPage, currentPageSize: newPerPage });\n }, [localPagination]);\n\n const onSearch = React.useCallback((query: string) => {\n localPagination.resetPage();\n localPagination.setPagination({ page: 1, pageSize: localPagination.currentPageSize });\n setLocalPagination({ ...localPagination, currentPage: 1, currentQuery: query });\n }, [localPagination]);\n\n const onReset = React.useCallback(() => {\n localPagination.resetPage();\n localPagination.setPagination({ page: 1, pageSize: localPagination.currentPageSize });\n setLocalPagination({ ...localPagination, currentPage: 1, currentQuery: '' });\n }, [localPagination]);\n\n return (\n <Row className=\"content\">\n <Col md={12}>\n <h2 style={{ marginBottom: 16 }}>\n Configured lookup Data Adapters <small>{pagination.total} total</small>\n </h2>\n <PaginatedList activePage={localPagination.currentPage}\n pageSize={localPagination.currentPageSize}\n onChange={onPageChange}\n totalItems={pagination.total}>\n <SearchForm onSearch={onSearch} onReset={onReset} queryHelpComponent={queryHelpComponent} />\n <ScrollContainer>\n <Table condensed hover className={Styles.overviewTable}>\n <thead>\n <tr>\n <th className={Styles.rowTitle}>Title</th>\n <th className={Styles.rowDescription}>Description</th>\n <th className={Styles.rowName}>Name</th>\n <th>Throughput</th>\n <th className={Styles.rowActions}>Actions</th>\n </tr>\n </thead>\n {loading ? <Spinner text=\"Loading data adapters\" /> : (\n <DataRow dataAdapters={dataAdapters}\n query={localPagination.currentQuery}\n errors={errorStates.dataAdapters} />\n )}\n </Table>\n </ScrollContainer>\n </PaginatedList>\n </Col>\n </Row>\n );\n};\n\nexport default withPaginationQueryParameter(DataAdaptersOverview);\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport styled from 'styled-components';\n\nconst ConfigSummaryDefinitionListWrapper = styled.div`\n dl {\n margin-top: 10px;\n\n dt {\n float: left;\n clear: left;\n }\n\n dd {\n margin-left: 185px;\n word-wrap: break-word;\n\n &:not(:last-child) {\n border-bottom: 1px solid #ececec;\n margin-bottom: 5px;\n padding-bottom: 5px;\n }\n }\n }\n`;\n\nexport default ConfigSummaryDefinitionListWrapper;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport * as React from 'react';\n\nimport usePluginEntities from 'hooks/usePluginEntities';\nimport { LinkContainer } from 'components/common/router';\nimport { Row, Col, Button, Input } from 'components/bootstrap';\nimport { getValueFromInput } from 'util/FormsUtils';\nimport Routes from 'routing/Routes';\nimport { LookupTableDataAdaptersActions } from 'stores/lookup-tables/LookupTableDataAdaptersStore';\nimport type { LookupTableAdapter } from 'logic/lookup-tables/types';\nimport useScopePermissions from 'hooks/useScopePermissions';\n\nimport type { DataAdapterPluginType } from './types';\nimport ConfigSummaryDefinitionListWrapper from './ConfigSummaryDefinitionListWrapper';\n\ntype Props = {\n dataAdapter: LookupTableAdapter,\n};\n\nconst DataAdapter = ({ dataAdapter }: Props) => {\n const [lookupKey, setLookupKey] = React.useState('');\n const [lookupResult, setLookupResult] = React.useState(null);\n const { loadingScopePermissions, scopePermissions } = useScopePermissions(dataAdapter);\n\n const _onChange = (event: React.SyntheticEvent) => {\n setLookupKey(getValueFromInput(event.target));\n };\n\n const _lookupKey = (event: React.SyntheticEvent) => {\n event.preventDefault();\n\n LookupTableDataAdaptersActions.lookup(dataAdapter.name, lookupKey).then((result: LookupTableAdapter[]) => {\n setLookupResult(result);\n });\n };\n\n const plugin = usePluginEntities('lookupTableAdapters').find((p: DataAdapterPluginType) => p.type === dataAdapter.config?.type);\n\n if (!plugin) {\n return <p>Unknown data adapter type {dataAdapter.config.type}. Is the plugin missing?</p>;\n }\n\n const { title: adapterTitle, description: adapterDescription, name: adapterName } = dataAdapter;\n const summary = plugin.summaryComponent;\n\n return (\n <Row className=\"content\">\n <Col md={6}>\n <h2>\n {adapterTitle}\n {' '}\n <small>({plugin.displayName})</small>\n </h2>\n <ConfigSummaryDefinitionListWrapper>\n <dl>\n <dt>Description</dt>\n <dd>{adapterDescription || <em>No description.</em>}</dd>\n </dl>\n </ConfigSummaryDefinitionListWrapper>\n <h4>Configuration</h4>\n <ConfigSummaryDefinitionListWrapper>\n {React.createElement(summary, { dataAdapter: dataAdapter })}\n </ConfigSummaryDefinitionListWrapper>\n {(!loadingScopePermissions && scopePermissions?.is_mutable) && (\n <LinkContainer to={Routes.SYSTEM.LOOKUPTABLES.DATA_ADAPTERS.edit(adapterName)}>\n <Button bsStyle=\"success\" role=\"button\" name=\"edit\">Edit</Button>\n </LinkContainer>\n )}\n </Col>\n <Col md={6}>\n <h3>Test lookup</h3>\n <p>You can manually trigger the data adapter using this form. The data will be not cached.</p>\n <form onSubmit={_lookupKey}>\n <fieldset>\n <Input type=\"text\"\n id=\"key\"\n name=\"key\"\n label=\"Key\"\n required\n onChange={_onChange}\n help=\"Key to look up a value for.\"\n value={lookupKey} />\n <Button type=\"submit\" bsStyle=\"success\">Look up</Button>\n </fieldset>\n </form>\n {lookupResult && (\n <div>\n <h4>Lookup result</h4>\n <pre>{JSON.stringify(lookupResult, null, 2)}</pre>\n </div>\n )}\n </Col>\n </Row>\n );\n};\n\nexport default DataAdapter;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport isEqual from 'lodash/isEqual';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { TimeUnitInput, FormSubmit } from 'components/common';\nimport { Col, Row, Input } from 'components/bootstrap';\nimport ObjectUtils from 'util/ObjectUtils';\nimport { getValueFromInput } from 'util/FormsUtils';\nimport { LookupTableDataAdaptersActions } from 'stores/lookup-tables/LookupTableDataAdaptersStore';\nimport Routes from 'routing/Routes';\nimport withHistory from 'routing/withHistory';\nimport withTelemetry from 'logic/telemetry/withTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nclass DataAdapterForm extends React.Component {\n validationCheckTimer = undefined;\n\n _input = undefined;\n\n static propTypes = {\n type: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n saved: PropTypes.func.isRequired,\n create: PropTypes.bool,\n dataAdapter: PropTypes.object,\n validate: PropTypes.func,\n validationErrors: PropTypes.object,\n sendTelemetry: PropTypes.func,\n history: PropTypes.object.isRequired,\n };\n\n static defaultProps = {\n create: true,\n dataAdapter: {\n id: undefined,\n title: '',\n description: '',\n name: '',\n custom_error_ttl_enabled: false,\n custom_error_ttl: null,\n custom_error_ttl_unit: null,\n config: {},\n },\n validate: null,\n validationErrors: {},\n sendTelemetry: () => {},\n };\n\n constructor(props) {\n super(props);\n\n this.state = this._initialState(props.dataAdapter);\n }\n\n componentDidMount() {\n this._input.getInputDOMNode().focus();\n const { create, dataAdapter } = this.props;\n\n if (!create) {\n // Validate when mounted to immediately show errors for invalid objects\n this._validate(dataAdapter);\n }\n }\n\n componentDidUpdate(prevProps) {\n const { type: currentType } = this.props;\n\n if (prevProps.type !== currentType) {\n this._input.getInputDOMNode().focus();\n }\n\n const { dataAdapter } = this.props;\n\n if (isEqual(dataAdapter, prevProps.dataAdapter)) {\n // props haven't changed, don't update our state from them\n return;\n }\n\n this.updateState(dataAdapter);\n }\n\n componentWillUnmount() {\n this._clearTimer();\n }\n\n updateState = (dataAdapter) => {\n this.setState(this._initialState(dataAdapter));\n };\n\n _initialState = (dataAdapter) => {\n const adapter = ObjectUtils.clone(dataAdapter);\n const { create } = this.props;\n\n return {\n // when creating always initially auto-generate the adapter name,\n // this will be false if the user changed the adapter name manually\n generateAdapterName: create,\n isFormDisabled: false,\n dataAdapter: {\n id: adapter.id,\n title: adapter.title,\n description: adapter.description,\n name: adapter.name,\n custom_error_ttl_enabled: adapter.custom_error_ttl_enabled,\n custom_error_ttl: adapter.custom_error_ttl,\n custom_error_ttl_unit: adapter.custom_error_ttl_unit,\n config: adapter.config,\n },\n };\n };\n\n _clearTimer = () => {\n if (this.validationCheckTimer !== undefined) {\n clearTimeout(this.validationCheckTimer);\n this.validationCheckTimer = undefined;\n }\n };\n\n _setIsFormDisabled = (isDisabled) => {\n this.setState({ isFormDisabled: isDisabled });\n };\n\n _validate = (adapter) => {\n const { validate } = this.props;\n\n // first cancel outstanding validation timer, we have new data\n this._clearTimer();\n\n if (validate) {\n this.validationCheckTimer = setTimeout(() => validate(adapter), 500);\n }\n };\n\n _onChange = (event) => {\n const { dataAdapter: dataAdapterState } = this.state;\n const dataAdapter = ObjectUtils.clone(dataAdapterState);\n\n dataAdapter[event.target.name] = getValueFromInput(event.target);\n let { generateAdapterName } = this.state;\n\n if (generateAdapterName && event.target.name === 'title') {\n // generate the name\n dataAdapter.name = this._sanitizeTitle(dataAdapter.title);\n }\n\n if (event.target.name === 'name') {\n // the adapter name has been changed manually, no longer automatically change it\n generateAdapterName = false;\n }\n\n this._validate(dataAdapter);\n this.setState({ dataAdapter: dataAdapter, generateAdapterName: generateAdapterName });\n };\n\n _onConfigChange = (event) => {\n const { dataAdapter: dataAdapterState } = this.state;\n const dataAdapter = ObjectUtils.clone(dataAdapterState);\n\n dataAdapter.config[event.target.name] = getValueFromInput(event.target);\n this._validate(dataAdapter);\n this.setState({ dataAdapter: dataAdapter });\n };\n\n _updateConfig = (newConfig) => {\n const { dataAdapter: dataAdapterState } = this.state;\n const dataAdapter = ObjectUtils.clone(dataAdapterState);\n\n dataAdapter.config = newConfig;\n this._validate(dataAdapter);\n this.setState({ dataAdapter: dataAdapter });\n };\n\n updateCustomErrorTTL = (value, unit, enabled) => {\n this._updateCustomErrorTTL(value, unit, enabled, 'custom_error_ttl');\n };\n\n _updateCustomErrorTTL = (value, unit, enabled, fieldPrefix) => {\n const { dataAdapter: dataAdapterState } = this.state;\n const dataAdapter = ObjectUtils.clone(dataAdapterState);\n\n if (enabled && value) {\n dataAdapter[fieldPrefix] = enabled && value ? value : null;\n dataAdapter[`${fieldPrefix}_enabled`] = enabled;\n } else {\n dataAdapter[fieldPrefix] = null;\n dataAdapter[`${fieldPrefix}_enabled`] = false;\n }\n\n dataAdapter[`${fieldPrefix}_unit`] = enabled ? unit : null;\n this._validate(dataAdapter);\n this.setState({ dataAdapter: dataAdapter });\n };\n\n _save = (event) => {\n if (event) {\n event.preventDefault();\n }\n\n const { dataAdapter } = this.state;\n const { create, saved, sendTelemetry } = this.props;\n\n sendTelemetry(TELEMETRY_EVENT_TYPE.LUT[create ? 'DATA_ADAPTER_CREATED' : 'DATA_ADAPTER_UPDATED'], {\n app_pathname: 'lut',\n app_section: 'lut_data_adapter',\n event_details: {\n type: dataAdapter?.config?.type,\n },\n });\n\n let promise;\n\n if (create) {\n promise = LookupTableDataAdaptersActions.create(dataAdapter);\n } else {\n promise = LookupTableDataAdaptersActions.update(dataAdapter);\n }\n\n promise.then(() => {\n saved();\n });\n };\n\n // eslint-disable-next-line\n _sanitizeTitle = (title) => {\n return title.trim().replace(/\\W+/g, '-').toLocaleLowerCase();\n };\n\n _validationState = (fieldName) => {\n const { validationErrors } = this.props;\n\n if (validationErrors[fieldName]) {\n return 'error';\n }\n\n return null;\n };\n\n _validationMessage = (fieldName, defaultText) => {\n const { validationErrors } = this.props;\n\n if (validationErrors[fieldName]) {\n return (\n <div>\n <span>{defaultText}</span>\n  \n <span><b>{validationErrors[fieldName][0]}</b></span>\n </div>\n );\n }\n\n return <span>{defaultText}</span>;\n };\n\n // eslint-disable-next-line\n _renderTitle = (title, typeName, create) => {\n const TagName = create ? 'h3' : 'h2';\n\n return <TagName>{title} <small>({typeName})</small></TagName>;\n };\n\n render() {\n const { dataAdapter, isFormDisabled } = this.state;\n const { create, type, title, history } = this.props;\n const adapterPlugins = PluginStore.exports('lookupTableAdapters');\n\n const plugin = adapterPlugins.filter((p) => p.type === type);\n const onCancel = () => history.push(Routes.SYSTEM.LOOKUPTABLES.DATA_ADAPTERS.OVERVIEW);\n let configFieldSet = null;\n let documentationComponent = null;\n let pluginDisplayName = dataAdapter.config.type;\n\n if (plugin && plugin.length > 0) {\n const p = plugin[0];\n\n pluginDisplayName = p.displayName;\n\n configFieldSet = React.createElement(p.formComponent, {\n config: dataAdapter.config,\n handleFormEvent: this._onConfigChange,\n updateConfig: this._updateConfig,\n validationMessage: this._validationMessage,\n validationState: this._validationState,\n setDisableFormSubmission: this._setIsFormDisabled,\n });\n\n if (p.documentationComponent) {\n documentationComponent = React.createElement(p.documentationComponent, {\n dataAdapterId: dataAdapter.id,\n });\n }\n }\n\n let documentationColumn = null;\n let formRowWidth = 8; // If there is no documentation component, we don't use the complete page\n\n // width\n if (documentationComponent) {\n formRowWidth = 6;\n\n documentationColumn = (\n <Col lg={formRowWidth}>\n {documentationComponent}\n </Col>\n );\n }\n\n return (\n <>\n <p>\n {this._renderTitle(title, pluginDisplayName, create)}\n </p>\n <Row>\n <Col lg={formRowWidth}>\n <form className=\"form form-horizontal\" onSubmit={this._save}>\n <fieldset>\n <Input type=\"text\"\n id=\"title\"\n name=\"title\"\n label=\"Title\"\n autoFocus\n required\n onChange={this._onChange}\n help=\"A short title for this data adapter.\"\n value={dataAdapter.title}\n labelClassName=\"col-sm-3\"\n ref={(ref) => { this._input = ref; }}\n wrapperClassName=\"col-sm-9\" />\n\n <Input type=\"text\"\n id=\"description\"\n name=\"description\"\n label=\"Description\"\n onChange={this._onChange}\n help=\"Data adapter description.\"\n value={dataAdapter.description}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n\n <Input type=\"text\"\n id=\"name\"\n name=\"name\"\n label=\"Name\"\n required\n onChange={this._onChange}\n help={this._validationMessage('name',\n 'The name that is being used to refer to this data adapter. Must be unique.')}\n value={dataAdapter.name}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\"\n bsStyle={this._validationState('name')} />\n\n <TimeUnitInput label=\"Custom Error TTL\"\n help=\"Define a custom TTL for caching erroneous results. Otherwise the default of 5 seconds is used\"\n update={this.updateCustomErrorTTL}\n value={dataAdapter.custom_error_ttl}\n unit={dataAdapter.custom_error_ttl_unit || 'MINUTES'}\n units={['MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS']}\n enabled={dataAdapter.custom_error_ttl_enabled}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\" />\n </fieldset>\n {configFieldSet}\n <fieldset>\n <Row>\n <Col mdOffset={3} md={9}>\n <FormSubmit submitButtonText={create ? 'Create adapter' : 'Update adapter'}\n disabledSubmit={isFormDisabled}\n onCancel={onCancel} />\n </Col>\n </Row>\n </fieldset>\n </form>\n </Col>\n {documentationColumn}\n </Row>\n </>\n );\n }\n}\n\nexport default withTelemetry(withHistory(DataAdapterForm));\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Select } from 'components/common';\nimport { Row, Col, Input } from 'components/bootstrap';\nimport { DataAdapterForm } from 'components/lookup-tables';\nimport ObjectUtils from 'util/ObjectUtils';\n\nclass DataAdapterCreate extends React.Component {\n static propTypes = {\n saved: PropTypes.func.isRequired,\n types: PropTypes.object.isRequired,\n validate: PropTypes.func,\n validationErrors: PropTypes.object,\n };\n\n static defaultProps = {\n validate: null,\n validationErrors: {},\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n dataAdapter: undefined,\n type: undefined,\n };\n }\n\n _onTypeSelect = (adapterType) => {\n const { types } = this.props;\n\n this.setState({\n type: adapterType,\n dataAdapter: {\n id: null,\n title: '',\n name: '',\n description: '',\n config: ObjectUtils.clone(types[adapterType].default_config),\n },\n });\n };\n\n render() {\n const {\n types,\n validate,\n validationErrors,\n saved,\n } = this.props;\n const { type, dataAdapter } = this.state;\n const adapterPlugins = {};\n\n PluginStore.exports('lookupTableAdapters').forEach((p) => {\n adapterPlugins[p.type] = p;\n });\n\n const sortedAdapters = Object.keys(types).map((key) => {\n const typeItem = types[key];\n\n if (adapterPlugins[typeItem.type] === undefined) {\n // eslint-disable-next-line no-console\n console.error(`Plugin component for data adapter type ${typeItem.type} is missing - invalid or missing plugin?`);\n\n return { value: typeItem.type, disabled: true, label: `${typeItem.type} - missing or invalid plugin` };\n }\n\n return { value: typeItem.type, label: adapterPlugins[typeItem.type].displayName };\n }).sort((a, b) => naturalSort(a.label.toLowerCase(), b.label.toLowerCase()));\n\n return (\n <div>\n <Row className=\"content\">\n <Col lg={8}>\n <form className=\"form form-horizontal\" onSubmit={() => {}}>\n <Input id=\"data-adapter-type-select\"\n label=\"Data Adapter Type\"\n required\n autoFocus\n help=\"The type of data adapter to configure.\"\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\">\n <Select placeholder=\"Select Data Adapter Type\"\n clearable={false}\n options={sortedAdapters}\n matchProp=\"label\"\n onChange={this._onTypeSelect}\n value={null} />\n </Input>\n </form>\n </Col>\n </Row>\n {dataAdapter && (\n <Row className=\"content\">\n <Col lg={12}>\n <DataAdapterForm dataAdapter={dataAdapter}\n type={type}\n create\n title=\"Configure Adapter\"\n validate={validate}\n validationErrors={validationErrors}\n saved={saved} />\n </Col>\n </Row>\n )}\n </div>\n );\n }\n}\n\nexport default DataAdapterCreate;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport React from 'react';\nimport { useField } from 'formik';\nimport PropTypes from 'prop-types';\nimport type { LookupTableAdapter } from 'src/logic/lookup-tables/types';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\n\ntype Props = {\n dataAdapters: LookupTableAdapter[],\n}\n\nconst DataAdapterPicker = ({\n dataAdapters,\n}: Props) => {\n const [, { value, touched, error }, { setTouched, setValue }] = useField('data_adapter_id');\n const sortedAdapters = dataAdapters.map((adapter: LookupTableAdapter) => ({ value: adapter.id, label: `${adapter.title} (${adapter.name})` })).sort((a, b) => naturalSort(a.label.toLowerCase(), b.label.toLowerCase()));\n\n const errorMessage = touched ? error : '';\n\n return (\n <fieldset>\n <Input id=\"data-adapter-select\"\n label=\"Data Adapter\"\n required\n autoFocus\n bsStyle={errorMessage ? 'error' : undefined}\n help={errorMessage || 'Select an existing data adapter'}\n labelClassName=\"col-sm-3\"\n wrapperClassName=\"col-sm-9\">\n <Select placeholder=\"Select a data adapter\"\n clearable={false}\n options={sortedAdapters}\n matchProp=\"label\"\n onBlur={() => setTouched(true)}\n onChange={setValue}\n value={value} />\n </Input>\n </fieldset>\n );\n};\n\nDataAdapterPicker.propTypes = {\n dataAdapters: PropTypes.array,\n};\n\nDataAdapterPicker.defaultProps = {\n dataAdapters: [],\n};\n\nexport default DataAdapterPicker;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Spinner } from 'components/common';\nimport { LookupTableDataAdaptersActions, LookupTableDataAdaptersStore } from 'stores/lookup-tables/LookupTableDataAdaptersStore';\n\nconst DataAdaptersContainer = createReactClass({\n displayName: 'DataAdaptersContainer',\n\n propTypes: {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]),\n },\n\n mixins: [Reflux.connect(LookupTableDataAdaptersStore)],\n\n getDefaultProps() {\n return {\n children: null,\n };\n },\n\n componentDidMount() {\n // TODO the 10k items is bad. we need a searchable/scrollable long list select box\n LookupTableDataAdaptersActions.searchPaginated(1, 10000, null);\n },\n\n render() {\n if (!this.state.dataAdapters) {\n return <Spinner />;\n }\n\n const childrenWithProps = React.Children.map(this.props.children,\n (child) => React.cloneElement(child,\n { dataAdapters: this.state.dataAdapters, pagination: this.state.pagination }));\n\n return <div>{childrenWithProps}</div>;\n },\n});\n\nexport default DataAdaptersContainer;\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./ErrorPopover.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./ErrorPopover.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport * as React from 'react';\n\nimport { OverlayTrigger, Icon } from 'components/common';\nimport { Popover } from 'components/bootstrap';\n\nimport Styles from './ErrorPopover.css';\n\ntype Props = {\n errorText: string,\n title: string,\n placement: 'bottom' | 'top' | 'right' | 'left',\n};\n\nconst ErrorPopover = ({ errorText, title = 'Error', placement = 'bottom' }: Props) => {\n const overlay = (\n <Popover id=\"error-popover\"\n title={title}\n className={Styles.overlay}>\n {errorText}\n </Popover>\n );\n\n return (\n <OverlayTrigger trigger={['hover', 'focus']} placement={placement} overlay={overlay}>\n <span className={Styles.trigger}>\n <Icon name=\"exclamation-triangle\" className=\"text-danger\" />\n </span>\n </OverlayTrigger>\n );\n};\n\nexport default ErrorPopover;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport { useQuery } from '@tanstack/react-query';\n\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport UserNotification from 'util/UserNotification';\nimport type { GenericEntityType } from 'logic/lookup-tables/types';\n\ntype ScopeParams = {\n is_mutable: boolean,\n}\n\ntype ScopeName = 'DEFAULT' | 'ILLUMINATE';\n\ntype EntityScopeRecord = Record<ScopeName, ScopeParams>;\n\ntype EntityScopeType = {\n entity_scopes: EntityScopeRecord,\n};\n\nfunction fetchScopePermissions() {\n return fetch('GET', qualifyUrl(ApiRoutes.EntityScopeController.getScope().url));\n}\n\nconst useGetPermissionsByScope = (entity: Partial<GenericEntityType>) => {\n const { data, isLoading, error } = useQuery<EntityScopeType, Error>(\n ['scope-permissions'],\n fetchScopePermissions,\n {\n onError: () => UserNotification.error(error.message),\n retry: 1,\n cacheTime: 1000 * 60 * 60 * 3, // cache for 3 hours\n staleTime: 1000 * 60 * 60 * 3, // data is valid for 3 hours\n },\n );\n\n const scope = entity?._scope?.toUpperCase() || 'DEFAULT';\n const permissions: ScopeParams = isLoading ? { is_mutable: false } : data.entity_scopes[scope];\n\n return {\n loadingScopePermissions: isLoading,\n scopePermissions: permissions,\n };\n};\n\nexport default useGetPermissionsByScope;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport * as React from 'react';\nimport type { Subtract } from 'utility-types';\n\nimport type { HistoryFunction } from './useHistory';\nimport useHistory from './useHistory';\n\ntype HistoryContext = {\n history: HistoryFunction;\n};\n\nconst withParams = <Props extends HistoryContext>(Component: React.ComponentType<Props>): React.ComponentType<Subtract<Props, HistoryContext>> => (props) => {\n const history = useHistory();\n\n return <Component {...props as Props} history={history} />;\n};\n\nexport default withParams;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport * as React from 'react';\nimport { useParams } from 'react-router-dom';\nimport type { Subtract } from 'utility-types';\n\ntype ParamsContext = {\n params: {\n [key: string]: string | null | undefined;\n };\n};\n\nconst withParams = <Props extends ParamsContext>(Component: React.ComponentType<Props>): React.ComponentType<Subtract<Props, ParamsContext>> => (props) => {\n const params = useParams();\n\n return <Component {...props as Props} params={params} />;\n};\n\nexport default withParams;\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport Reflux from 'reflux';\n\nimport UserNotification from 'util/UserNotification';\nimport * as URLUtils from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const LookupTableCachesActions = singletonActions(\n 'core.LookupTableCaches',\n () => Reflux.createActions({\n searchPaginated: { asyncResult: true },\n reloadPage: { asyncResult: true },\n get: { asyncResult: true },\n create: { asyncResult: true },\n delete: { asyncResult: true },\n update: { asyncResult: true },\n getTypes: { asyncResult: true },\n validate: { asyncResult: true },\n }),\n);\n\nexport const LookupTableCachesStore = singletonStore(\n 'core.LookupTableCaches',\n () => Reflux.createStore({\n listenables: [LookupTableCachesActions],\n cache: null,\n caches: null,\n types: null,\n pagination: {\n page: 1,\n per_page: 10,\n total: 0,\n count: 0,\n query: null,\n },\n validationErrors: {},\n\n getInitialState() {\n return this.getState();\n },\n\n getState() {\n return {\n cache: this.cache,\n caches: this.caches,\n types: this.types,\n pagination: this.pagination,\n validationErrors: this.validationErrors,\n };\n },\n\n propagateChanges() {\n this.trigger(this.getState());\n },\n\n reloadPage() {\n const promise = this.searchPaginated(this.pagination.page, this.pagination.per_page, this.pagination.query);\n\n LookupTableCachesActions.reloadPage.promise(promise);\n\n return promise;\n },\n\n searchPaginated(page, perPage, query) {\n let url;\n\n if (query) {\n url = this._url(`caches?page=${page}&per_page=${perPage}&query=${encodeURIComponent(query)}`);\n } else {\n url = this._url(`caches?page=${page}&per_page=${perPage}`);\n }\n\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.pagination = {\n count: response.count,\n total: response.total,\n page: response.page,\n per_page: response.per_page,\n query: response.query,\n };\n\n this.caches = response.caches;\n this.propagateChanges();\n }, this._errorHandler('Fetching lookup table caches failed', 'Could not retrieve the lookup caches'));\n\n LookupTableCachesActions.searchPaginated.promise(promise);\n\n return promise;\n },\n\n get(idOrName) {\n const url = this._url(`caches/${idOrName}`);\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.cache = response;\n this.propagateChanges();\n }, this._errorHandler(`Fetching lookup table cache ${idOrName} failed`, 'Could not retrieve lookup table cache'));\n\n LookupTableCachesActions.get.promise(promise);\n\n return promise;\n },\n\n create(cache) {\n const url = this._url('caches');\n const promise = fetch('POST', url, cache);\n\n promise.then((response) => {\n this.cache = response;\n this.propagateChanges();\n }, this._errorHandler('Creating lookup table cache failed', `Could not create lookup table cache \"${cache.name}\"`));\n\n LookupTableCachesActions.create.promise(promise);\n\n return promise;\n },\n\n update(cache) {\n const url = this._url(`caches/${cache.id}`);\n const promise = fetch('PUT', url, cache);\n\n promise.then((response) => {\n this.cache = response;\n this.propagateChanges();\n }, this._errorHandler('Updating lookup table cache failed', `Could not update lookup table cache \"${cache.name}\"`));\n\n LookupTableCachesActions.update.promise(promise);\n\n return promise;\n },\n\n getTypes() {\n const url = this._url('types/caches');\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.types = response;\n this.propagateChanges();\n }, this._errorHandler('Fetching available types failed', 'Could not fetch the available lookup table cache types'));\n\n LookupTableCachesActions.getTypes.promise(promise);\n\n return promise;\n },\n\n delete(idOrName) {\n const url = this._url(`caches/${idOrName}`);\n const promise = fetch('DELETE', url);\n\n promise.catch(this._errorHandler('Deleting lookup table cache failed', `Could not delete lookup table cache \"${idOrName}\"`));\n\n LookupTableCachesActions.delete.promise(promise);\n\n return promise;\n },\n\n validate(cache) {\n const url = this._url('caches/validate');\n const promise = fetch('POST', url, cache);\n\n promise.then((response) => {\n this.validationErrors = response.errors;\n this.propagateChanges();\n }, this._errorHandler(\n 'Lookup table cache validation failed',\n `Could not validate lookup table cache \"${cache.name}\"`,\n ));\n\n LookupTableCachesActions.validate.promise(promise);\n\n return promise;\n },\n\n _errorHandler(message, title, cb) {\n return (error) => {\n let errorMessage;\n\n try {\n errorMessage = error.additional.body.message;\n } catch (e) {\n errorMessage = error.message;\n }\n\n UserNotification.error(`${message}: ${errorMessage}`, title);\n\n if (cb) {\n cb(error);\n }\n };\n },\n\n _url(path) {\n return URLUtils.qualifyUrl(`/system/lookup/${path}`);\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport Reflux from 'reflux';\n\nimport UserNotification from 'util/UserNotification';\nimport * as URLUtils from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const LookupTableDataAdaptersActions = singletonActions(\n 'core.LookupTableDataAdapters',\n () => Reflux.createActions({\n searchPaginated: { asyncResult: true },\n reloadPage: { asyncResult: true },\n get: { asyncResult: true },\n create: { asyncResult: true },\n delete: { asyncResult: true },\n update: { asyncResult: true },\n getTypes: { asyncResult: true },\n lookup: { asyncResult: true },\n validate: { asyncResult: true },\n }),\n);\n\nexport const LookupTableDataAdaptersStore = singletonStore(\n 'core.LookupTableDataAdapters',\n () => Reflux.createStore({\n listenables: [LookupTableDataAdaptersActions],\n dataAdapter: null,\n dataAdapters: undefined,\n types: null,\n pagination: {\n page: 1,\n per_page: 10,\n total: 0,\n count: 0,\n query: null,\n },\n lookupResult: null,\n validationErrors: {},\n\n getInitialState() {\n return this.getState();\n },\n\n getState() {\n return {\n dataAdapter: this.dataAdapter,\n dataAdapters: this.dataAdapters,\n lookupResult: this.lookupResult,\n types: this.types,\n pagination: this.pagination,\n validationErrors: this.validationErrors,\n };\n },\n\n propagateChanges() {\n this.trigger(this.getState());\n },\n\n reloadPage() {\n const promise = this.searchPaginated(this.pagination.page, this.pagination.per_page, this.pagination.query);\n\n LookupTableDataAdaptersActions.reloadPage.promise(promise);\n\n return promise;\n },\n\n searchPaginated(page, perPage, query) {\n let url;\n\n if (query) {\n url = this._url(`adapters?page=${page}&per_page=${perPage}&query=${encodeURIComponent(query)}`);\n } else {\n url = this._url(`adapters?page=${page}&per_page=${perPage}`);\n }\n\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.pagination = {\n count: response.count,\n total: response.total,\n page: response.page,\n per_page: response.per_page,\n query: response.query,\n };\n\n this.dataAdapters = response.data_adapters;\n this.propagateChanges();\n }, this._errorHandler('Fetching lookup table data adapters failed', 'Could not retrieve the lookup dataAdapters'));\n\n LookupTableDataAdaptersActions.searchPaginated.promise(promise);\n\n return promise;\n },\n\n get(idOrName) {\n const url = this._url(`adapters/${idOrName}`);\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.dataAdapter = response;\n this.propagateChanges();\n }, this._errorHandler(`Fetching lookup table data adapter ${idOrName} failed`, 'Could not retrieve lookup table data adapter'));\n\n LookupTableDataAdaptersActions.get.promise(promise);\n\n return promise;\n },\n\n create(dataAdapter) {\n const url = this._url('adapters');\n const promise = fetch('POST', url, dataAdapter);\n\n promise.then((response) => {\n this.dataAdapter = response;\n this.propagateChanges();\n }, this._errorHandler('Creating lookup table data adapter failed', `Could not create lookup table data adapter \"${dataAdapter.name}\"`));\n\n LookupTableDataAdaptersActions.create.promise(promise);\n\n return promise;\n },\n\n update(dataAdapter) {\n const url = this._url(`adapters/${dataAdapter.id}`);\n const promise = fetch('PUT', url, dataAdapter);\n\n promise.then((response) => {\n this.dataAdapter = response;\n this.propagateChanges();\n }, this._errorHandler('Updating lookup table data adapter failed', `Could not update lookup table data adapter \"${dataAdapter.name}\"`));\n\n LookupTableDataAdaptersActions.update.promise(promise);\n\n return promise;\n },\n\n getTypes() {\n const url = this._url('types/adapters');\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.types = response;\n this.propagateChanges();\n }, this._errorHandler('Fetching available types failed', 'Could not fetch the available lookup table data adapter types'));\n\n LookupTableDataAdaptersActions.getTypes.promise(promise);\n\n return promise;\n },\n\n delete(idOrName) {\n const url = this._url(`adapters/${idOrName}`);\n const promise = fetch('DELETE', url);\n\n promise.catch(this._errorHandler('Deleting lookup table data adapter failed', `Could not delete lookup table data adapter \"${idOrName}\"`));\n\n LookupTableDataAdaptersActions.delete.promise(promise);\n\n return promise;\n },\n\n lookup(adapterName, key) {\n const promise = fetch('GET', this._url(`adapters/${adapterName}/query?key=${encodeURIComponent(key)}`));\n\n promise.then((response) => {\n this.lookupResult = response;\n this.propagateChanges();\n }, this._errorHandler('Lookup failed', `Could not lookup value for key \"${key}\" in lookup table data adapter \"${adapterName}\"`));\n\n LookupTableDataAdaptersActions.lookup.promise(promise);\n\n return promise;\n },\n\n validate(adapter) {\n const url = this._url('adapters/validate');\n const promise = fetch('POST', url, adapter);\n\n promise.then((response) => {\n this.validationErrors = response.errors;\n this.propagateChanges();\n }, this._errorHandler('Lookup table data adapter validation failed', `Could not validate lookup table data adapter \"${adapter.name}\"`));\n\n LookupTableDataAdaptersActions.validate.promise(promise);\n\n return promise;\n },\n\n _errorHandler(message, title, cb) {\n return (error) => {\n let errorMessage;\n\n try {\n errorMessage = error.additional.body.message;\n } catch (e) {\n errorMessage = error.message;\n }\n\n UserNotification.error(`${message}: ${errorMessage}`, title);\n\n if (cb) {\n cb(error);\n }\n };\n },\n\n _url(path) {\n return URLUtils.qualifyUrl(`/system/lookup/${path}`);\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 * <http://www.mongodb.com/licensing/server-side-public-license>.\n */\nimport Reflux from 'reflux';\n\nimport UserNotification from 'util/UserNotification';\nimport PaginationURL from 'util/PaginationURL';\nimport { qualifyUrl } from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\nimport type { LookupTable, LookupTableCache, LookupTableAdapter } from 'logic/lookup-tables/types';\nimport type { PaginatedResponseType } from 'stores/PaginationTypes';\n\ntype LookupResult = {\n multi_value: string | number | object | boolean | null,\n single_value: string | number | object | boolean | null,\n string_list_value: Array<string> | null,\n ttl: number,\n has_error: boolean,\n}\n\ntype ValidationErrors = {\n error_context: {\n [fieldName: string]: Array<string> | undefined,\n },\n failed: boolean,\n errors: {\n [fieldName: string]: Array<string> | undefined,\n },\n}\n\ntype ErrorState = {\n tables: {\n [tableId: string]: string | undefined,\n },\n caches: {\n [cacheId: string]: string | undefined,\n },\n dataAdapters: {\n [adapterId: string]: string | undefined,\n }\n}\n\ntype LookupTablesStoreState = {\n pagination: PaginatedResponseType,\n errorState: ErrorState,\n table: LookupTable | null,\n cache: LookupTableCache | null,\n dataAdapter: LookupTableAdapter | null,\n tables: {\n [tableId: string]: LookupTable | undefined,\n },\n caches: {\n [cacheId: string]: LookupTableCache | undefined,\n },\n dataAdapters: {\n [adapterId: string]: LookupTableAdapter | undefined,\n },\n lookupResult: LookupResult | null,\n validationErrors: ValidationErrors,\n}\n\ntype LookupTableActionsType = {\n searchPaginated: (page: number, perPage: number, query?: string, resolve?: boolean) => Promise<unknown>,\n reloadPage: () => Promise<unknown>,\n get: (idOrName: string) => Promise<unknown>,\n create: (table: LookupTable) => Promise<unknown>,\n delete: (idOrName: string) => Promise<unknown>,\n update: (table: LookupTable) => Promise<unknown>,\n getErrors: (tableNames: Array<string> | undefined, cacheNames: Array<string> | undefined, dataAdapterNames: Array<string> | undefined) => Promise<unknown>,\n lookup: (tableName: string, key: string) => Promise<unknown>,\n purgeKey: (table: LookupTable, key: string) => Promise<unknown>,\n purgeAll: (table: LookupTable) => Promise<unknown>,\n validate: (table: LookupTable) => Promise<unknown>,\n}\n\nexport const LookupTablesActions = singletonActions(\n 'core.LookupTables',\n () => Reflux.createActions<LookupTableActionsType>({\n searchPaginated: { asyncResult: true },\n reloadPage: { asyncResult: true },\n get: { asyncResult: true },\n create: { asyncResult: true },\n delete: { asyncResult: true },\n update: { asyncResult: true },\n getErrors: { asyncResult: true },\n lookup: { asyncResult: true },\n purgeKey: { asyncResult: true },\n purgeAll: { asyncResult: true },\n validate: { asyncResult: true },\n }),\n);\n\nexport const LookupTablesStore = singletonStore(\n 'core.LookupTables',\n () => Reflux.createStore<LookupTablesStoreState>({\n listenables: [LookupTablesActions],\n pagination: {\n page: 1,\n per_page: 10,\n total: 0,\n count: 0,\n query: null,\n },\n errorStates: {\n tables: {},\n caches: {},\n dataAdapters: {},\n },\n table: null,\n cache: null,\n dataAdapter: null,\n tables: null,\n caches: null,\n dataAdapters: null,\n lookupResult: null,\n validationErrors: {},\n\n getInitialState() {\n return this.getState();\n },\n\n getState() {\n return {\n errorStates: this.errorStates,\n table: this.table,\n cache: this.cache,\n dataAdapter: this.dataAdapter,\n tables: this.tables,\n caches: this.caches,\n dataAdapters: this.dataAdapters,\n lookupResult: this.lookupResult,\n validationErrors: this.validationErrors,\n pagination: this.pagination,\n };\n },\n\n propagateChanges() {\n this.trigger(this.getState());\n },\n\n reloadPage() {\n const promise = this.searchPaginated(this.pagination.page, this.pagination.per_page, this.pagination.query);\n\n LookupTablesActions.reloadPage.promise(promise);\n\n return promise;\n },\n\n searchPaginated(page: number, perPage: number, query: string = null, resolve: boolean = true) {\n const url = this._url(PaginationURL('tables', page, perPage, query, { resolve }));\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.pagination = {\n count: response.count,\n total: response.total,\n page: response.page,\n per_page: response.per_page,\n query: response.query,\n };\n\n this.tables = response.lookup_tables;\n this.caches = response.caches;\n this.dataAdapters = response.data_adapters;\n this.propagateChanges();\n }, this._errorHandler('Fetching lookup tables failed', 'Could not retrieve the lookup tables'));\n\n LookupTablesActions.searchPaginated.promise(promise);\n\n return promise;\n },\n\n get(idOrName: string) {\n const url = this._url(`tables/${idOrName}?resolve=true`);\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n // do not propagate pagination! it will destroy the subsequent overview page's state.\n const lookupTable = response.lookup_tables[0];\n\n this.table = lookupTable;\n this.cache = response.caches[lookupTable.cache_id];\n this.dataAdapter = response.data_adapters[lookupTable.data_adapter_id];\n this.propagateChanges();\n }, this._errorHandler(`Fetching lookup table ${idOrName} failed`,\n 'Could not retrieve lookup table'));\n\n LookupTablesActions.get.promise(promise);\n\n return promise;\n },\n\n create(table: LookupTable) {\n const url = this._url('tables');\n const promise = fetch('POST', url, table);\n\n promise.catch(this._errorHandler('Creating lookup table failed', `Could not create lookup table \"${table.name}\"`));\n\n LookupTablesActions.create.promise(promise);\n\n return promise;\n },\n\n update(table: LookupTable) {\n const url = this._url(`tables/${table.id}`);\n const promise = fetch('PUT', url, table);\n\n promise.catch(this._errorHandler('Updating lookup table failed', `Could not update lookup table \"${table.name}\"`));\n\n LookupTablesActions.update.promise(promise);\n\n return promise;\n },\n\n delete(idOrName: string) {\n const url = this._url(`tables/${idOrName}`);\n const promise = fetch('DELETE', url);\n\n promise.catch(this._errorHandler('Deleting lookup table failed', `Could not delete lookup table \"${idOrName}\"`));\n\n LookupTablesActions.delete.promise(promise);\n\n return promise;\n },\n\n getErrors(tableNames: Array<string> | undefined, cacheNames: Array<string> | undefined, dataAdapterNames: Array<string> | undefined) {\n const request: {\n tables?: Array<string>;\n caches?: Array<string>;\n data_adapters?: Array<string>;\n } = {};\n\n if (tableNames) {\n request.tables = tableNames;\n }\n\n if (cacheNames) {\n request.caches = cacheNames;\n }\n\n if (dataAdapterNames) {\n request.data_adapters = dataAdapterNames;\n }\n\n const promise = fetch('POST', this._url('errorstates'), request);\n\n promise.then((response) => {\n this.errorStates = {\n tables: response.tables || {},\n caches: response.caches || {},\n dataAdapters: response.data_adapters || {},\n };\n\n this.propagateChanges();\n }, this._errorHandler('Fetching lookup table error state failed.', 'Could not error states'));\n\n LookupTablesActions.getErrors.promise(promise);\n\n return promise;\n },\n\n lookup(tableName: string, key: string) {\n const promise = fetch('GET', this._url(`tables/${tableName}/query?key=${encodeURIComponent(key)}`));\n\n promise.then((response) => {\n this.lookupResult = response;\n this.propagateChanges();\n }, this._errorHandler('Lookup failed', `Could not lookup value for key \"${key}\" in lookup table \"${tableName}\"`));\n\n LookupTablesActions.lookup.promise(promise);\n\n return promise;\n },\n\n purgeKey(table: LookupTable, key: string) {\n const promise = fetch('POST', this._urlClusterWise(`tables/${table.id}/purge?key=${encodeURIComponent(key)}`));\n\n promise.then(() => {\n UserNotification.success(`Purging cache key \"${key}\" for lookup table \"${table.name}\"`, 'Success!');\n }, this._errorHandler(`Could not purge cache for key \"${key}\" in lookup table \"${table.name}\"`, 'Failed!'));\n\n LookupTablesActions.purgeKey.promise(promise);\n\n return promise;\n },\n\n purgeAll(table: LookupTable) {\n const promise = fetch('POST', this._urlClusterWise(`tables/${table.id}/purge`));\n\n promise.then(() => {\n UserNotification.success(`Purging cache for lookup table \"${table.name}\"`, 'Success!');\n }, this._errorHandler(`Could not purge cache for lookup table \"${table.name}\"`, 'Failed!'));\n\n LookupTablesActions.purgeAll.promise(promise);\n\n return promise;\n },\n\n validate(table: LookupTable) {\n const url = this._url('tables/validate');\n const promise = fetch('POST', url, table);\n\n promise.then((response: any) => {\n this.validationErrors = response.errors;\n this.propagateChanges();\n }, this._errorHandler('Lookup table validation failed', `Could not validate lookup table \"${table.name}\"`));\n\n LookupTablesActions.validate.promise(promise);\n\n return promise;\n },\n\n _errorHandler(message: string, title: string, cb: (error: Error) => void | undefined) {\n return (error) => {\n try {\n // Do not show the user notification if the error is a hibernate error message. We cannot display those\n // properly yet...\n if (error.additional.body[0].message_template) {\n return;\n }\n } catch (e) {\n // ignored\n }\n\n let errorMessage;\n\n try {\n errorMessage = error.additional.body.message;\n } catch (e) {\n errorMessage = error.message;\n }\n\n UserNotification.error(`${message}: ${errorMessage}`, title);\n\n if (cb) {\n cb(error);\n }\n };\n },\n\n _url(path: string) {\n return qualifyUrl(`/system/lookup/${path}`);\n },\n\n _urlClusterWise(path: string) {\n return qualifyUrl(`/cluster/system/lookup/${path}`);\n },\n }),\n);\n"],"names":["___CSS_LOADER_EXPORT___","module","Container","StyledButton","theme","items","path","title","permissions","exactPathMatch","Component","obj","props","result","NAV_ITEMS","MaxmindAdapterFieldSet","config","updateConfig","handleFormEvent","validationState","validationMessage","isCloud","AppConfig","pathsForCloud","ipInfoDatabaseTypes","databaseTypes","update","value","unit","enabled","name","newConfig","ObjectUtils","updateCheckInterval","onDbTypeSelect","id","MaxmindAdapterSummary","MaxmindAdapterDocumentation","cityFields","countryFields","asnFields","dataAdapter","csvFile1","csvFile2","csvFile3","DnsAdapterFieldSet","fieldPrefix","lookupTypes","DnsAdapterSummary","lookupType","StyledPre","styleMarginBottom","aResponse","aaaaResponse","aAndAaaaResponse","ptrResponse","txtResponse","DSVHTTPAdapterFieldSet","HTTPJSONPathAdapterFieldSet","headers","configChange","HTTPJSONPathAdapterSummary","exampleJSON","noMultiResult","mapResult","smallMapResult","listResult","pipelineRule","NullCacheFieldSet","CaffeineCacheFieldSet","ref","values","setValues","errors","stateConfig","setStateConfig","validateConfig","configErrors","handleUpdate","auxConfig","auxValConfig","SummaryContainer","SummaryRow","Title","Value","cache","Actions","LUTTableEntry","table","history","useHistory","sendTelemetry","useSendTelemetry","loadingScopePermissions","scopePermissions","useScopePermissions","handleDelete","handleEdit","Routes","options","ScrollContainer","buildHelpPopover","queryHelpComponent","LUTItem","caches","dataAdapters","errorStates","lookupName","map","empty","lookupAdapterError","adapter","NoResults","query","DataRow","tables","LookupTablesOverview","pagination","paginationQueryParameter","loading","setLoading","localPagination","setLocalPagination","currentPage","currentPageSize","currentQuery","onPageChange","newPage","newPerPage","onSearch","onReset","withPaginationQueryParameter","INIT_INPUT","navigate","purgeKey","setPurgeKey","lookupKey","setLookupKey","lookupResult","setLookupResult","tableName","handleInputOnChange","event","newValue","handlePurgeKey","hadlePurgeAll","handleLookupKey","resp","INIT_TABLE_VALUES","LookupTableForm","saved","create","validate","requiredField","handleSubmit","promise","valuesToSave","initialValues","onCancel","updatable","formikHelpers","touched","setFieldValue","setFieldTouched","isSubmitting","valueType","LookupTableCreate","ButtonToolbar","countMap","entriesMap","computeEntriesMetrics","metrics","total","acc","nodeId","NumberUtils","computeCountMetrics","totalHits","totalMisses","hitRate","CachesOverview","plugin","usePluginEntities","cacheName","typeName","TagName","INIT_CACHE","CacheForm","type","validationErrors","configRef","generateName","setGenerateName","p","pluginName","DocComponent","configFieldSet","sanitizeName","inName","handleTitleChange","safeName","handleValidation","confErrors","types","setType","cachePlugins","plugins","cacheTypes","inType","a","b","handleSelect","selectedType","CachePicker","error","setTouched","setValue","sortedCaches","errorMessage","LookupTableCachesStore","childrenWithProps","child","adapterName","adapterTitle","adapterDescription","adapterId","_onEdit","_onDelete","DataAdaptersOverview","_onChange","_lookupKey","summary","DataAdapterForm","isDisabled","dataAdapterState","generateAdapterName","fieldName","defaultText","prevProps","currentType","isFormDisabled","documentationComponent","pluginDisplayName","documentationColumn","formRowWidth","withTelemetry","withHistory","DataAdapterCreate","adapterType","adapterPlugins","sortedAdapters","key","typeItem","DataAdapterPicker","LookupTableDataAdaptersStore","errorText","placement","overlay","fetchScopePermissions","entity","data","isLoading","scope","params","LookupTableCachesActions","page","perPage","url","response","idOrName","message","cb","LookupTableDataAdaptersActions","LookupTablesActions","LookupTablesStore","resolve","lookupTable","tableNames","cacheNames","dataAdapterNames","request"],"sourceRoot":""}</code></pre> <br/> <br/> <div class='clear'></div> </main> </div> <br/><br/> <div class="align-center">© 2015 - 2024 <a href="/legal-notice.php">Weber Informatics LLC</a> | <a href="/data-protection.php">Privacy Policy</a></div> <br/><br/><br/><br/><br/><br/> </body> </html> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>