web-interface.assets.d7fbfcf5-9.b67e8c7e61f91c988887.js.map Maven / Gradle / Ivy
{"version":3,"sources":["webpack:///./src/components/maps/adapter/MaxmindAdapterFieldSet.jsx","webpack:///./src/components/maps/adapter/MaxmindAdapterSummary.jsx","webpack:///./src/components/maps/adapter/MaxmindAdapterDocumentation.jsx","webpack:///./src/components/maps/adapter/index.js","webpack:///./src/components/lookup-tables/adapters/CSVFileAdapterFieldSet.jsx","webpack:///./src/components/lookup-tables/adapters/CSVFileAdapterSummary.jsx","webpack:///./src/components/lookup-tables/adapters/CSVFileAdapterDocumentation.jsx","webpack:///./src/components/lookup-tables/adapters/DnsAdapterFieldSet.jsx","webpack:///./src/components/lookup-tables/adapters/DnsAdapterSummary.jsx","webpack:///./src/components/lookup-tables/adapters/DnsAdapterDocumentation.jsx","webpack:///./src/components/lookup-tables/adapters/DSVHTTPAdapterFieldSet.jsx","webpack:///./src/components/lookup-tables/adapters/DSVHTTPAdapterSummary.jsx","webpack:///./src/components/lookup-tables/adapters/DSVHTTPAdapterDocumentation.jsx","webpack:///./src/components/lookup-tables/adapters/HTTPJSONPathAdapterFieldSet.jsx","webpack:///./src/components/lookup-tables/adapters/HTTPJSONPathAdapterSummary.jsx","webpack:///./src/components/lookup-tables/adapters/HTTPJSONPathAdapterDocumentation.jsx","webpack:///./src/components/lookup-tables/adapters/index.js","webpack:///./src/components/lookup-tables/caches/NullCacheFieldSet.jsx","webpack:///./src/components/lookup-tables/caches/NullCacheSummary.jsx","webpack:///./src/components/lookup-tables/caches/CaffeineCacheFieldSet.jsx","webpack:///./src/components/lookup-tables/caches/CaffeineCacheSummary.jsx","webpack:///./src/components/lookup-tables/caches/CaffeineCacheDocumentation.jsx","webpack:///./src/components/lookup-tables/caches/index.js","webpack:///./src/components/lookup-tables/LUTTableEntry.jsx","webpack:///./src/components/lookup-tables/LookupTablesOverview.jsx","webpack:///./src/components/lookup-tables/LookupTable.jsx","webpack:///./src/components/lookup-tables/LookupTableForm.jsx","webpack:///./src/components/lookup-tables/LookupTableCreate.jsx","webpack:///./src/components/lookup-tables/CacheTableEntry.jsx","webpack:///./src/components/lookup-tables/CachesOverview.jsx","webpack:///./src/components/lookup-tables/Cache.jsx","webpack:///./src/components/lookup-tables/CacheForm.jsx","webpack:///./src/components/lookup-tables/CacheCreate.jsx","webpack:///./src/components/lookup-tables/CachePicker.jsx","webpack:///./src/components/lookup-tables/CachesContainer.jsx","webpack:///./src/components/lookup-tables/DataAdapterTableEntry.jsx","webpack:///./src/components/lookup-tables/DataAdaptersOverview.jsx","webpack:///./src/components/lookup-tables/DataAdapter.jsx","webpack:///./src/components/lookup-tables/DataAdapterForm.jsx","webpack:///./src/components/lookup-tables/DataAdapterCreate.jsx","webpack:///./src/components/lookup-tables/DataAdapterPicker.jsx","webpack:///./src/components/lookup-tables/DataAdaptersContainer.jsx","webpack:///./src/components/lookup-tables/ErrorPopover.jsx","webpack:///./src/components/lookup-tables/index.js","webpack:///./src/components/lookup-tables/Overview.css","webpack:///./src/components/lookup-tables/ConfigSummary.css?de13","webpack:///./src/components/lookup-tables/ErrorPopover.css?cabb","webpack:///./src/components/lookup-tables/ConfigSummary.css","webpack:///./src/components/lookup-tables/ErrorPopover.css","webpack:///./src/components/lookup-tables/Overview.css?d088"],"names":["MaxmindAdapterFieldSet","value","unit","enabled","name","config","ObjectUtils","clone","props","updateConfig","_update","id","database_type","this","type","label","autoFocus","required","onChange","handleFormEvent","help","validationMessage","bsStyle","validationState","path","labelClassName","wrapperClassName","placeholder","clearable","options","matchProp","_onDbTypeSelect","update","updateCheckInterval","check_interval","check_interval_unit","defaultEnabled","React","Component","PropTypes","object","isRequired","func","MaxmindAdapterSummary","dataAdapter","MAXMIND_ASN","MAXMIND_CITY","MAXMIND_COUNTRY","MaxmindAdapterDocumentation","style","marginBottom","href","target","rel","PluginStore","register","PluginManifest","lookupTableAdapters","displayName","formComponent","summaryComponent","documentationComponent","CSVFileAdapterFieldSet","separator","quotechar","key_column","value_column","checked","case_insensitive_lookup","CSVFileAdapterSummary","CSVFileAdapterDocumentation","className","padding","DnsAdapterFieldSet","newConfig","lookup_type","_updateCacheTTLOverride","fieldPrefix","_onLookupTypeSelect","server_ips","request_timeout","updateCacheTTLOverride","cache_ttl_override","cache_ttl_override_unit","units","cache_ttl_override_enabled","shape","number","string","DnsAdapterSummary","A","AAAA","A_AAAA","PTR","TXT","propTypes","DnsAdapterDocumentation","styleMarginBottom","codeStyle","fontSize","DSVHTTPAdapterFieldSet","url","refresh_interval","line_separator","ignorechar","check_presence_only","DSVHTTPAdapterSummary","DSVHTTPAdapterDocumentation","HTTPJSONPathAdapterFieldSet","headers","urlType","single_value_jsonpath","multi_value_jsonpath","user_agent","pairs","editable","onHTTPHeaderUpdate","HTTPJSONPathAdapterSummary","HTTPJSONPathAdapterDocumentation","md","NullCacheFieldSet","NullCacheSummary","cache","CaffeineCacheFieldSet","max_size","updateAfterAccess","expire_after_access","expire_after_access_unit","updateAfterWrite","expire_after_write","expire_after_write_unit","CaffeineCacheSummary","CaffeineCacheDocumentation","lookupTableCaches","LookupTablesActions","CombinedProvider","get","LUTTableEntry","window","confirm","table","title","then","reloadPage","errors","placement","errorText","to","Routes","SYSTEM","LOOKUPTABLES","show","contentPack","content_pack","marginLeft","description","CACHES","DATA_ADAPTERS","edit","bsSize","onClick","_onDelete","LookupTablesOverview","newPage","newPerPage","searchPaginated","pagination","query","resetLoadingStateCb","page","per_page","map","empty","errorStates","dataAdapters","adapter","data_adapter_id","Styles","popoverWide","condensed","lookupTables","tables","_lookupName","cache_id","caches","_lookupAdapterError","key","total","_onPageChange","totalItems","onSearch","_onSearch","onReset","_onReset","useLoadingState","CREATE","trigger","rootClose","overlay","_helpPopover","searchHelpButton","fixedWidth","hover","overviewTable","rowTitle","rowDescription","rowName","rowCache","rowAdapter","rowActions","arrayOf","objectOf","LookupTable","lookupKey","lookupResult","purgeKey","event","setState","FormsUtils","getValueFromInput","e","preventDefault","state","length","purgeAll","lookup","result","default_single_value","default_multi_value","default_single_value_type","toLowerCase","default_multi_value_type","onSubmit","_onPurgeKey","_onChangePurgeKey","_onPurgeAll","_lookupKey","_onChange","JSON","stringify","LookupTableForm","undefined","validationCheckTimer","clearTimeout","_clearTimer","validate","setTimeout","t","enable_default_single","enable_default_multi","_validate","create","saved","valueType","_onDefaultValueUpdate","fieldName","validationErrors","defaultText","_initialState","nextProps","_","isEqual","_save","_validationMessage","_validationState","_onCheckEnableSingleDefault","_onDefaultSingleValueUpdate","allowedTypes","_onCheckEnableMultiDefault","_onDefaultMultiValueUpdate","onSelect","_onAdapterSelect","selectedId","_onCacheSelect","mdOffset","bool","LookupTableCreate","lg","LookupTableCachesActions","metrics","totalHits","totalMisses","Object","keys","nodeId","hits","metric","rate","forEach","v","misses","hitRate","NumberUtils","formatNumber","count","countMap","requests","entriesMap","computeValue","_onEntriesMetrics","_onCountMetrics","suffix","CachesOverview","text","cacheTableEntries","CacheTableEntry","array","Cache","plugins","exports","p","plugin","summary","createElement","CacheForm","c","generateName","stateCache","_sanitizeTitle","trim","replace","typeName","TagName","_input","getInputDOMNode","focus","prevProps","currentType","updateState","filter","configFieldSet","pluginDisplayName","_onConfigChange","_updateConfig","documentationColumn","formRowWidth","_renderTitle","ref","CacheCreate","cacheType","types","default_config","cachePlugins","sortedCaches","typeItem","sort","a","b","naturalSort","_onTypeSelect","CachePicker","LookupTableCachesStore","CachesContainer","createReactClass","children","oneOfType","node","mixins","Reflux","connect","getDefaultProps","componentDidMount","render","childrenWithProps","Children","child","cloneElement","LookupTableDataAdaptersActions","DataAdapterTableEntry","error","DataAdaptersOverview","dataAdapterEntries","DataAdapter","DataAdapterForm","generateAdapterName","custom_error_ttl_enabled","custom_error_ttl","custom_error_ttl_unit","dataAdapterState","_updateCustomErrorTTL","dataAdapterId","updateCustomErrorTTL","DataAdapterCreate","adapterType","adapterPlugins","sortedAdapters","console","disabled","DataAdapterPicker","LookupTableDataAdaptersStore","DataAdaptersContainer","ErrorPopover","module","push","i","locals","content","transform"],"mappings":"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","file":"d7fbfcf5-9.b67e8c7e61f91c988887.js","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport ObjectUtils from 'util/ObjectUtils';\n\nimport { Input } from 'components/bootstrap';\nimport { Select, TimeUnitInput } from 'components/common';\n\nclass MaxmindAdapterFieldSet 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 _update = (value, unit, enabled, name) => {\n const config = ObjectUtils.clone(this.props.config);\n config[name] = enabled ? value : 0;\n config[`${name}_unit`] = unit;\n this.props.updateConfig(config);\n };\n\n updateCheckInterval = (value, unit, enabled) => {\n this._update(value, unit, enabled, 'check_interval');\n };\n\n _onDbTypeSelect = (id) => {\n const config = ObjectUtils.clone(this.props.config);\n config.database_type = id;\n this.props.updateConfig(config);\n };\n\n render() {\n const { config } = this.props;\n const databaseTypes = [\n { label: 'ASN database', value: 'MAXMIND_ASN' },\n { label: 'City database', value: 'MAXMIND_CITY' },\n { label: 'Country database', value: 'MAXMIND_COUNTRY' },\n ];\n return (\n \n );\n }\n}\n\nexport default MaxmindAdapterFieldSet;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { TimeUnit } from 'components/common';\n\nclass MaxmindAdapterSummary extends React.Component {\n static propTypes = {\n dataAdapter: PropTypes.object.isRequired,\n };\n\n render() {\n const { config } = this.props.dataAdapter;\n const databaseTypes = {\n MAXMIND_ASN: 'ASN database',\n MAXMIND_CITY: 'City database',\n MAXMIND_COUNTRY: 'Country database',\n };\n return (\n \n - Database file path
\n - {config.path}
\n - Database type
\n - {databaseTypes[config.database_type]}
\n - Check interval
\n \n
\n );\n }\n}\n\nexport default MaxmindAdapterSummary;\n","/* eslint-disable react/no-unescaped-entities */\nimport React from 'react';\nimport { Alert } from 'components/graylog';\n\nclass MaxmindAdapterDocumentation extends React.Component {\n render() {\n const cityFields = `{\n \"city\": { \"geoname_id\": 5375480, \"names\": { \"en\": \"Mountain View\" } },\n \"location\": {\n \"accuracy_radius\": 1000,\n \"average_income\": null,\n \"latitude\": 37.386,\n \"longitude\": -122.0838,\n \"metro_code\": 807,\n \"population_density\": null,\n \"time_zone\": \"America/Los_Angeles\"\n },\n \"postal\": { \"code\": \"94035\" },\n \"subdivisions\": [ { \"geoname_id\": 5332921, \"iso_code\": \"CA\", \"names\": { \"en\": \"California\" } } ],\n}`;\n\n const countryFields = `{\n \"continent\": { \"code\": \"NA\", \"geoname_id\": 6255149, \"names\": { \"en\": \"North America\" } },\n \"country\": { \"geoname_id\": 6252001, \"iso_code\": \"US\", \"names\": { \"en\": \"United States\" } },\n \"registered_country\": { \"geoname_id\": 6252001, \"iso_code\": \"US\", \"names\": { } },\n \"represented_country\": { \"geoname_id\": null, \"iso_code\": \"US\", \"names\": { } },\n \"traits\": {\n \"ip_address\": \"8.8.8.8\",\n \"is_anonymous_proxy\": false,\n \"is_legitimate_proxy\": false,\n \"is_satellite_provider\": false,\n \"isp\": null,\n \"organization\": null,\n }\n}`;\n\n const asnFields = `{\n \"as_number\": 15169,\n \"as_organization\": \"Google LLC\"\n}`;\n\n return (\n \n The GeoIP data adapter supports reading MaxMind's GeoIP2 databases.
\n\n \n Limitations
\n Currently the ASN, city and country databases are supported.
\n For support of additional database types, please visit our support channels.
\n \n\n
\n\n ASN database fields
\n\n {asnFields}
\n\n Country database fields
\n\n {countryFields}
\n\n City database fields
\n\n In addition to the fields provided by the country database, the city database also includes the following fields:
\n\n {cityFields}
\n\n For a complete documentation of the fields, please see MaxMind's developer documentation
\n \n );\n }\n}\n\nexport default MaxmindAdapterDocumentation;\n","import { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\nimport MaxmindAdapterFieldSet from 'components/maps/adapter/MaxmindAdapterFieldSet';\nimport MaxmindAdapterSummary from 'components/maps/adapter/MaxmindAdapterSummary';\nimport MaxmindAdapterDocumentation from 'components/maps/adapter/MaxmindAdapterDocumentation';\n\nPluginStore.register(new PluginManifest({}, {\n lookupTableAdapters: [\n {\n type: 'maxmind_geoip',\n displayName: 'Geo IP - MaxMind\\u2122 Databases',\n formComponent: MaxmindAdapterFieldSet,\n summaryComponent: MaxmindAdapterSummary,\n documentationComponent: MaxmindAdapterDocumentation,\n },\n ],\n}));\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Input } from 'components/bootstrap';\n\nclass CSVFileAdapterFieldSet extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n updateConfig: PropTypes.func.isRequired,\n handleFormEvent: PropTypes.func.isRequired,\n validationState: PropTypes.func.isRequired,\n validationMessage: PropTypes.func.isRequired,\n };\n\n render() {\n const { config } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default CSVFileAdapterFieldSet;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nclass CSVFileAdapterSummary extends React.Component {\n static propTypes = {\n dataAdapter: PropTypes.object.isRequired,\n };\n\n render() {\n const { config } = this.props.dataAdapter;\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
\n );\n }\n}\n\n\nexport default CSVFileAdapterSummary;\n","/* eslint-disable react/no-unescaped-entities */\nimport React from 'react';\nimport { Alert } from 'components/graylog';\n\nclass CSVFileAdapterDocumentation extends React.Component {\n render() {\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 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 CSV file requirements:
\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 );\n }\n}\n\nexport default CSVFileAdapterDocumentation;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport ObjectUtils from 'util/ObjectUtils';\n\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\nexport default DnsAdapterFieldSet;\n","import React from 'react';\nimport PropTypes from 'prop-types';\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","import React from 'react';\n\nconst DnsAdapterDocumentation = () => {\n const styleMarginBottom = { marginBottom: 10 };\n const codeStyle = { fontSize: 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\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,\n 192.168.1.244\n
).\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","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Input } from 'components/bootstrap';\nimport { URLWhiteListInput } from 'components/common';\n\nconst DSVHTTPAdapterFieldSet = ({ handleFormEvent, validationState, validationMessage, config }) => {\n return (\n \n );\n};\n\nDSVHTTPAdapterFieldSet.propTypes = {\n config: PropTypes.object.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n handleFormEvent: PropTypes.func.isRequired,\n validationState: PropTypes.func.isRequired,\n validationMessage: PropTypes.func.isRequired,\n};\n\nexport default DSVHTTPAdapterFieldSet;\n","import 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","import React from 'react';\n\nimport { Alert } from 'components/graylog';\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 CSV file requirements:
\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","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { Input } from 'components/bootstrap';\nimport { URLWhiteListInput, KeyValueTable } from 'components/common';\n\nimport ObjectUtils from 'util/ObjectUtils';\n\nclass HTTPJSONPathAdapterFieldSet extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n updateConfig: PropTypes.func.isRequired,\n handleFormEvent: PropTypes.func.isRequired,\n validationState: PropTypes.func.isRequired,\n validationMessage: PropTypes.func.isRequired,\n };\n\n state = {};\n\n onHTTPHeaderUpdate = (headers) => {\n const { config, updateConfig } = this.props;\n const configChange = ObjectUtils.clone(config);\n configChange.headers = headers;\n updateConfig(config);\n };\n\n render() {\n const { config, handleFormEvent, validationMessage, validationState } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default HTTPJSONPathAdapterFieldSet;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { KeyValueTable } from 'components/common';\n\nconst HTTPJSONPathAdapterSummary = ({ dataAdapter }) => {\n const { config } = dataAdapter;\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","/* eslint-disable react/no-unescaped-entities, no-template-curly-in-string */\nimport React from 'react';\nimport { Alert, Col, Row } from 'components/graylog';\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
{noMultiResult}
\n \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
{mapResult}
\n \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
{listResult}
\n \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
{smallMapResult}
\n \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","import { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\n\nimport {} from '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","import PropTypes from 'prop-types';\nimport React from 'react';\n\nclass NullCacheFieldSet extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n handleFormEvent: PropTypes.func.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n validationState: PropTypes.func.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n validationMessage: PropTypes.func.isRequired,\n };\n\n render() {\n return null;\n }\n}\n\nexport default NullCacheFieldSet;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nclass NullCacheSummary extends React.Component {\n static propTypes = {\n cache: PropTypes.object.isRequired,\n };\n\n render() {\n return (This cache has no configuration.
);\n }\n}\n\nexport default NullCacheSummary;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport ObjectUtils from 'util/ObjectUtils';\n\nimport { Input } from 'components/bootstrap';\nimport { TimeUnitInput } from 'components/common';\n\nclass CaffeineCacheFieldSet extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n handleFormEvent: PropTypes.func.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n validationState: PropTypes.func.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n validationMessage: PropTypes.func.isRequired,\n };\n\n _update = (value, unit, enabled, name) => {\n const config = ObjectUtils.clone(this.props.config);\n config[name] = enabled ? value : 0;\n config[`${name}_unit`] = unit;\n this.props.updateConfig(config);\n };\n\n updateAfterAccess = (value, unit, enabled) => {\n this._update(value, unit, enabled, 'expire_after_access');\n };\n\n updateAfterWrite = (value, unit, enabled) => {\n this._update(value, unit, enabled, 'expire_after_write');\n };\n\n render() {\n const { config } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default CaffeineCacheFieldSet;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { TimeUnit } from 'components/common';\n\nclass CaffeineCacheSummary extends React.Component {\n static propTypes = {\n cache: PropTypes.object.isRequired,\n };\n\n render() {\n const { config } = this.props.cache;\n return (\n \n - Maximum entries
\n - {config.max_size}
\n - Expire after access
\n \n - Expire after write
\n \n
\n );\n }\n}\n\nexport default CaffeineCacheSummary;\n","/* eslint-disable react/no-unescaped-entities */\nimport React from 'react';\nimport { Alert } from 'components/graylog';\n\nclass CaffeineCacheDocumentation extends React.Component {\n render() {\n return (\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 Implementation details
\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 }\n}\n\nexport default CaffeineCacheDocumentation;\n","import { 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","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { LinkContainer } from 'react-router-bootstrap';\nimport { Link } from 'react-router';\n\nimport CombinedProvider from 'injection/CombinedProvider';\n\nimport Routes from 'routing/Routes';\n\nimport { Button } from 'components/graylog';\nimport { ErrorPopover } from 'components/lookup-tables';\nimport { ContentPackMarker } from 'components/common';\n\nconst { LookupTablesActions } = CombinedProvider.get('LookupTables');\n\nclass LUTTableEntry extends React.Component {\n static propTypes = {\n table: PropTypes.object.isRequired,\n cache: PropTypes.object.isRequired,\n dataAdapter: PropTypes.object.isRequired,\n errors: PropTypes.object,\n };\n\n static defaultProps = {\n errors: {\n table: null,\n cache: null,\n dataAdapter: null,\n },\n };\n\n _onDelete = () => {\n // eslint-disable-next-line no-alert\n if (window.confirm(`Are you sure you want to delete lookup table \"${this.props.table.title}\"?`)) {\n LookupTablesActions.delete(this.props.table.id).then(() => LookupTablesActions.reloadPage());\n }\n };\n\n render() {\n return (\n \n \n \n {this.props.errors.table && ( ) }\n {this.props.table.title}\n \n \n {this.props.table.description} \n {this.props.table.name} \n \n {this.props.errors.cache && ( ) }\n {this.props.cache.title}\n \n \n {this.props.errors.dataAdapter && ( ) }\n {this.props.dataAdapter.title}\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default LUTTableEntry;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { LinkContainer } from 'react-router-bootstrap';\n\nimport Routes from 'routing/Routes';\nimport CombinedProvider from 'injection/CombinedProvider';\n\nimport { Row, Col, Table, Popover, OverlayTrigger, Button } from 'components/graylog';\nimport { PaginatedList, SearchForm, Icon } from 'components/common';\nimport LUTTableEntry from 'components/lookup-tables/LUTTableEntry';\n\nimport Styles from './Overview.css';\n\nconst { LookupTablesActions } = CombinedProvider.get('LookupTables');\n\nclass LookupTablesOverview extends React.Component {\n static propTypes = {\n tables: PropTypes.arrayOf(PropTypes.object).isRequired,\n caches: PropTypes.objectOf(PropTypes.object).isRequired,\n dataAdapters: PropTypes.objectOf(PropTypes.object).isRequired,\n pagination: PropTypes.object.isRequired,\n errorStates: PropTypes.object.isRequired,\n };\n\n _onPageChange = (newPage, newPerPage) => {\n LookupTablesActions.searchPaginated(newPage, newPerPage, this.props.pagination.query);\n };\n\n _onSearch = (query, resetLoadingStateCb) => {\n LookupTablesActions\n .searchPaginated(this.props.pagination.page, this.props.pagination.per_page, query)\n .then(resetLoadingStateCb);\n };\n\n _onReset = () => {\n LookupTablesActions.searchPaginated(this.props.pagination.page, this.props.pagination.per_page);\n };\n\n _lookupName = (id, map) => {\n const empty = { title: 'None' };\n if (!map) {\n return empty;\n }\n return map[id] || empty;\n };\n\n _lookupAdapterError = (table) => {\n if (this.props.errorStates.dataAdapters && this.props.dataAdapters) {\n const adapter = this.props.dataAdapters[table.data_adapter_id];\n if (!adapter) {\n return null;\n }\n return this.props.errorStates.dataAdapters[adapter.name];\n }\n return null;\n };\n\n _helpPopover = () => {\n return (\n \n Available search fields
\n \n \n \n Field \n Description \n \n \n \n \n id \n Lookup Table ID \n \n \n title \n The title of the lookup table \n \n \n name \n The reference name of the lookup table \n \n \n description \n The description of lookup table \n \n \n
\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 };\n\n render() {\n const lookupTables = this.props.tables.map((table) => {\n const cache = this._lookupName(table.cache_id, this.props.caches);\n const dataAdapter = this._lookupName(table.data_adapter_id, this.props.dataAdapters);\n const errors = {\n table: this.props.errorStates.tables[table.name],\n cache: null,\n dataAdapter: this._lookupAdapterError(table),\n };\n\n return (\n \n );\n });\n\n return (\n \n \n \n \n Configured lookup tables\n {this.props.pagination.total} total\n
\n \n \n \n \n \n \n \n \n \n \n \n \n Title \n Description \n Name \n Cache \n Data Adapter \n Actions \n \n \n {lookupTables}\n
\n \n \n
\n \n );\n }\n}\n\nexport default LookupTablesOverview;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { LinkContainer } from 'react-router-bootstrap';\nimport { Link } from 'react-router';\n\nimport { ButtonToolbar, Row, Col, Button } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport Routes from 'routing/Routes';\nimport FormsUtils from 'util/FormsUtils';\nimport { ContentPackMarker } from 'components/common';\nimport CombinedProvider from 'injection/CombinedProvider';\n\nconst { LookupTablesActions } = CombinedProvider.get('LookupTables');\n\nclass LookupTable extends React.Component {\n static propTypes = {\n table: PropTypes.object.isRequired,\n cache: PropTypes.object.isRequired,\n dataAdapter: PropTypes.object.isRequired,\n };\n\n state = {\n lookupKey: null,\n lookupResult: null,\n purgeKey: null,\n };\n\n _onChange = (event) => {\n this.setState({ lookupKey: FormsUtils.getValueFromInput(event.target) });\n };\n\n _onChangePurgeKey = (event) => {\n this.setState({ purgeKey: FormsUtils.getValueFromInput(event.target) });\n };\n\n _onPurgeKey = (e) => {\n e.preventDefault();\n if (this.state.purgeKey && this.state.purgeKey.length > 0) {\n LookupTablesActions.purgeKey(this.props.table, this.state.purgeKey);\n }\n };\n\n _onPurgeAll = (e) => {\n e.preventDefault();\n LookupTablesActions.purgeAll(this.props.table);\n };\n\n _lookupKey = (e) => {\n e.preventDefault();\n LookupTablesActions.lookup(this.props.table.name, this.state.lookupKey).then((result) => {\n this.setState({ lookupResult: result });\n });\n };\n\n render() {\n return (\n \n \n \n {this.props.table.title}\n \n
\n {this.props.table.description}
\n \n - Data adapter
\n - \n {this.props.dataAdapter.title}\n
\n - Cache
\n - {this.props.cache.title}
\n
\n \n \n \n {\n (this.props.table.default_single_value || this.props.table.default_multi_value)\n && (\n \n - Default single value
\n {this.props.table.default_single_value}
{' '}({this.props.table.default_single_value_type.toLowerCase()}) \n - Default multi value
\n {this.props.table.default_multi_value}
{' '}({this.props.table.default_multi_value_type.toLowerCase()}) \n
\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 Test lookup
\n You can manually query the lookup table using this form. The data will be cached as configured by Graylog.
\n \n { this.state.lookupResult && (\n \n Lookup result
\n {JSON.stringify(this.state.lookupResult, null, 2)}
\n \n )}\n \n
\n );\n }\n}\n\nexport default LookupTable;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport _ from 'lodash';\n\nimport { Col, Row, Button } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport ObjectUtils from 'util/ObjectUtils';\nimport FormsUtils from 'util/FormsUtils';\nimport { JSONValueInput } from 'components/common';\n\nimport { CachesContainer, CachePicker, DataAdaptersContainer, DataAdapterPicker } from 'components/lookup-tables';\n\nimport CombinedProvider from 'injection/CombinedProvider';\n\nconst { LookupTablesActions } = CombinedProvider.get('LookupTables');\n\nclass LookupTableForm extends React.Component {\n static propTypes = {\n saved: PropTypes.func.isRequired,\n create: PropTypes.bool,\n table: PropTypes.object,\n validate: PropTypes.func,\n validationErrors: PropTypes.object,\n };\n\n static defaultProps = {\n create: true,\n table: {\n id: undefined,\n title: '',\n description: '',\n name: '',\n cache_id: undefined,\n data_adapter_id: undefined,\n default_single_value: '',\n default_single_value_type: 'NULL',\n default_multi_value: '',\n default_multi_value_type: 'NULL',\n },\n validate: null,\n validationErrors: {},\n };\n\n componentDidMount() {\n if (!this.props.create) {\n // Validate when mounted to immediately show errors for invalid objects\n this._validate(this.props.table);\n }\n }\n\n componentWillReceiveProps(nextProps) {\n if (_.isEqual(this.props.table, nextProps.table)) {\n // props haven't change, don't update our state from them\n return;\n }\n this.setState(this._initialState(nextProps.table));\n }\n\n componentWillUnmount() {\n this._clearTimer();\n }\n\n validationCheckTimer = undefined;\n\n _clearTimer = () => {\n if (this.validationCheckTimer !== undefined) {\n clearTimeout(this.validationCheckTimer);\n this.validationCheckTimer = undefined;\n }\n };\n\n _validate = (table) => {\n if (!table.cache_id || !table.data_adapter_id) {\n return;\n }\n // first cancel outstanding validation timer, we have new data\n this._clearTimer();\n if (this.props.validate) {\n this.validationCheckTimer = setTimeout(() => this.props.validate(table), 500);\n }\n };\n\n _initialState = (t) => {\n const table = ObjectUtils.clone(t);\n\n return {\n table: {\n id: table.id,\n title: table.title,\n description: table.description,\n name: table.name,\n cache_id: table.cache_id,\n data_adapter_id: table.data_adapter_id,\n default_single_value: table.default_single_value,\n default_single_value_type: table.default_single_value_type,\n default_multi_value: table.default_multi_value,\n default_multi_value_type: table.default_multi_value_type,\n },\n enable_default_single: table.default_single_value_type && table.default_single_value_type !== 'NULL',\n enable_default_multi: table.default_multi_value_type && table.default_multi_value_type !== 'NULL',\n };\n };\n\n _onChange = (event) => {\n const table = ObjectUtils.clone(this.state.table);\n table[event.target.name] = FormsUtils.getValueFromInput(event.target);\n this._validate(table);\n this.setState({ table: table });\n };\n\n _onConfigChange = (event) => {\n const table = ObjectUtils.clone(this.state.table);\n table.config[event.target.name] = FormsUtils.getValueFromInput(event.target);\n this._validate(table);\n this.setState({ table: table });\n };\n\n _save = (event) => {\n if (event) {\n event.preventDefault();\n }\n\n let promise;\n if (this.props.create) {\n promise = LookupTablesActions.create(this.state.table);\n } else {\n promise = LookupTablesActions.update(this.state.table);\n }\n\n promise.then(() => {\n this.props.saved();\n });\n };\n\n _onAdapterSelect = (id) => {\n const table = ObjectUtils.clone(this.state.table);\n table.data_adapter_id = id;\n this._validate(table);\n this.setState({ table: table });\n };\n\n _onCacheSelect = (id) => {\n const table = ObjectUtils.clone(this.state.table);\n table.cache_id = id;\n this._validate(table);\n this.setState({ table: table });\n };\n\n _onDefaultValueUpdate = (name, value, valueType) => {\n const table = ObjectUtils.clone(this.state.table);\n\n table[`default_${name}_value`] = value;\n table[`default_${name}_value_type`] = valueType;\n\n this._validate(table);\n this.setState({ table: table });\n };\n\n _onCheckEnableSingleDefault = (e) => {\n const value = FormsUtils.getValueFromInput(e.target);\n this.setState({ enable_default_single: value });\n\n if (value === false) {\n this._onDefaultValueUpdate('single', '', 'NULL');\n }\n };\n\n _onCheckEnableMultiDefault = (e) => {\n const value = FormsUtils.getValueFromInput(e.target);\n this.setState({ enable_default_multi: value });\n\n if (value === false) {\n this._onDefaultValueUpdate('multi', '', 'NULL');\n }\n };\n\n _onDefaultSingleValueUpdate = (value, valueType) => {\n this._onDefaultValueUpdate('single', value, valueType);\n };\n\n _onDefaultMultiValueUpdate = (value, valueType) => {\n this._onDefaultValueUpdate('multi', value, valueType);\n };\n\n _validationState = (fieldName) => {\n if (this.props.validationErrors[fieldName]) {\n return 'error';\n }\n return null;\n };\n\n _validationMessage = (fieldName, defaultText) => {\n if (this.props.validationErrors[fieldName]) {\n return (\n \n {defaultText}\n \n {this.props.validationErrors[fieldName][0]}\n \n );\n }\n return {defaultText};\n };\n\n state = this._initialState(this.props.table);\n\n render() {\n const { table } = this.state;\n\n return (\n \n );\n }\n}\n\nexport default LookupTableForm;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { Row, Col } from 'components/graylog';\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","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { LinkContainer } from 'react-router-bootstrap';\nimport { Link } from 'react-router';\n\nimport { Button } from 'components/graylog';\nimport Routes from 'routing/Routes';\nimport CombinedProvider from 'injection/CombinedProvider';\nimport { ContentPackMarker } from 'components/common';\nimport { MetricsMapper, MetricContainer, CounterRate } from 'components/metrics';\nimport NumberUtils from 'util/NumberUtils';\n\nconst { LookupTableCachesActions } = CombinedProvider.get('LookupTableCaches');\n\nclass LUTTableEntry extends React.Component {\n static propTypes = {\n cache: PropTypes.object.isRequired,\n };\n\n _onDelete = () => {\n const { cache } = this.props;\n\n // eslint-disable-next-line no-alert\n if (window.confirm(`Are you sure you want to delete cache \"${cache.title}\"?`)) {\n LookupTableCachesActions.delete(cache.id).then(() => LookupTableCachesActions.reloadPage());\n }\n };\n\n _onCountMetrics = (metrics) => {\n let totalHits = 0;\n let totalMisses = 0;\n\n Object.keys(metrics).map((nodeId) => metrics[nodeId].hits.metric.rate.total).forEach((v) => { totalHits += v; });\n Object.keys(metrics).map((nodeId) => metrics[nodeId].misses.metric.rate.total).forEach((v) => { totalMisses += v; });\n\n const total = totalHits + totalMisses;\n\n if (total < 1) {\n return 'n/a';\n }\n const hitRate = (totalHits * 100.0) / total;\n return `${NumberUtils.formatNumber(hitRate)}%`;\n };\n\n _onEntriesMetrics = (metrics) => {\n let total = 0;\n\n Object.keys(metrics).map((nodeId) => metrics[nodeId].count.metric.value).forEach((v) => { total += v; });\n\n if (total < 0) {\n return 'n/a';\n }\n\n return NumberUtils.formatNumber(total);\n };\n\n render() {\n const { cache } = this.props;\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 const entriesMap = {\n count: `org.graylog2.lookup.caches.${cache.id}.entries`,\n };\n\n return (\n \n \n \n {cache.title}\n \n \n {cache.description} \n {cache.name} \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default LUTTableEntry;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport Routes from 'routing/Routes';\nimport { LinkContainer } from 'react-router-bootstrap';\n\nimport CombinedProvider from 'injection/CombinedProvider';\nimport { Row, Col, Table, Popover, OverlayTrigger, Button } from 'components/graylog';\nimport { PaginatedList, SearchForm, Spinner, Icon } from 'components/common';\nimport CacheTableEntry from 'components/lookup-tables/CacheTableEntry';\n\nimport Styles from './Overview.css';\n\nconst { LookupTableCachesActions } = CombinedProvider.get('LookupTableCaches');\n\nclass CachesOverview extends React.Component {\n static propTypes = {\n caches: PropTypes.array.isRequired,\n pagination: PropTypes.object.isRequired,\n };\n\n _onPageChange = (newPage, newPerPage) => {\n const { pagination } = this.props;\n\n LookupTableCachesActions.searchPaginated(newPage, newPerPage, pagination.query);\n };\n\n _onSearch = (query, resetLoadingStateCb) => {\n const { pagination } = this.props;\n\n LookupTableCachesActions\n .searchPaginated(pagination.page, pagination.per_page, query)\n .then(resetLoadingStateCb);\n };\n\n _onReset = () => {\n const { pagination } = this.props;\n\n LookupTableCachesActions.searchPaginated(pagination.page, pagination.per_page);\n };\n\n _helpPopover = () => {\n return (\n \n Available search fields
\n \n \n \n Field \n Description \n \n \n \n \n id \n Cache ID \n \n \n title \n The title of the cache \n \n \n name \n The reference name of the cache \n \n \n description \n The description of cache \n \n \n
\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 };\n\n render() {\n const { caches, pagination } = this.props;\n\n if (!caches) {\n return ;\n }\n const cacheTableEntries = caches.map((cache) => {\n return (\n \n );\n });\n\n return (\n \n \n \n \n Configured lookup Caches\n \n {pagination.total} total\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n Title \n Description \n Name \n Entries \n Hit rate \n Throughput \n Actions \n \n \n {cacheTableEntries}\n
\n \n \n
\n \n );\n }\n}\n\nexport default CachesOverview;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { LinkContainer } from 'react-router-bootstrap';\n\nimport Routes from 'routing/Routes';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport { Row, Col, Button } from 'components/graylog';\nimport { ContentPackMarker } from 'components/common';\n\nimport Styles from './ConfigSummary.css';\n\nconst Cache = ({ cache }) => {\n const plugins = {};\n PluginStore.exports('lookupTableCaches').forEach((p) => {\n plugins[p.type] = p;\n });\n\n const plugin = plugins[cache.config.type];\n if (!plugin) {\n return Unknown cache type {cache.config.type}. Is the plugin missing?
;\n }\n\n const summary = plugin.summaryComponent;\n\n return (\n \n \n \n {cache.title}\n \n {' '}\n ({plugin.displayName})\n
\n \n \n - Description
\n - {cache.description || No description.}
\n
\n \n Configuration
\n \n {React.createElement(summary, { cache: cache })}\n \n \n \n \n \n \n
\n );\n};\n\nCache.propTypes = {\n cache: PropTypes.object.isRequired,\n};\n\nexport default Cache;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport _ from 'lodash';\n\nimport { Button, Col, Row } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport ObjectUtils from 'util/ObjectUtils';\nimport FormsUtils from 'util/FormsUtils';\n\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport CombinedProvider from 'injection/CombinedProvider';\n\nconst { LookupTableCachesActions } = CombinedProvider.get('LookupTableCaches');\n\nclass CacheForm extends React.Component {\n validationCheckTimer = undefined;\n\n _input = undefined;\n\n static propTypes = {\n type: PropTypes.string.isRequired,\n saved: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n create: PropTypes.bool,\n cache: PropTypes.object,\n validate: PropTypes.func,\n validationErrors: PropTypes.object,\n };\n\n static defaultProps = {\n create: true,\n cache: {\n id: undefined,\n title: '',\n description: '',\n name: '',\n config: {},\n },\n validate: null,\n validationErrors: {},\n };\n\n constructor(props) {\n super(props);\n\n this.state = this._initialState(props.cache);\n }\n\n componentDidMount() {\n this._input.getInputDOMNode().focus();\n const { create, cache } = this.props;\n\n if (!create) {\n // Validate when mounted to immediately show errors for invalid objects\n this._validate(cache);\n }\n }\n\n componentDidUpdate(prevProps) {\n const { type: currentType } = this.props;\n if (prevProps.type !== currentType) {\n this._input.getInputDOMNode().focus();\n }\n const { cache } = this.props;\n if (_.isEqual(cache, prevProps.cache)) {\n // props haven't change, don't update our state from them\n return;\n }\n this.updateState(cache);\n }\n\n componentWillUnmount() {\n this._clearTimer();\n }\n\n updateState = (cache) => {\n this.setState(this._initialState(cache));\n }\n\n _initialState = (c) => {\n const { create } = this.props;\n const cache = ObjectUtils.clone(c);\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 generateName: create,\n cache: {\n id: cache.id,\n title: cache.title,\n description: cache.description,\n name: cache.name,\n config: cache.config,\n },\n };\n };\n\n _clearTimer = () => {\n if (this.validationCheckTimer !== undefined) {\n clearTimeout(this.validationCheckTimer);\n this.validationCheckTimer = undefined;\n }\n };\n\n _validate = (cache) => {\n const { validate } = this.props;\n\n // first cancel outstanding validation timer, we have new data\n this._clearTimer();\n if (validate) {\n this.validationCheckTimer = setTimeout(() => validate(cache), 500);\n }\n };\n\n _onChange = (event) => {\n const { cache: stateCache } = this.state;\n\n const cache = ObjectUtils.clone(stateCache);\n cache[event.target.name] = FormsUtils.getValueFromInput(event.target);\n let { generateName } = this.state;\n if (generateName && event.target.name === 'title') {\n // generate the name\n cache.name = this._sanitizeTitle(cache.title);\n }\n if (event.target.name === 'name') {\n // the cache name has been changed manually, no longer automatically change it\n generateName = false;\n }\n this._validate(cache);\n this.setState({ cache: cache });\n };\n\n _onConfigChange = (event) => {\n const { cache: stateCache } = this.state;\n\n const cache = ObjectUtils.clone(stateCache);\n cache.config[event.target.name] = FormsUtils.getValueFromInput(event.target);\n this._validate(cache);\n this.setState({ cache: cache });\n };\n\n _updateConfig = (newConfig) => {\n const { cache: stateCache } = this.state;\n\n const cache = ObjectUtils.clone(stateCache);\n cache.config = newConfig;\n this._validate(cache);\n this.setState({ cache: cache });\n };\n\n _save = (event) => {\n const { cache: stateCache } = this.state;\n const { create, saved } = this.props;\n\n if (event) {\n event.preventDefault();\n }\n\n let promise;\n if (create) {\n promise = LookupTableCachesActions.create(stateCache);\n } else {\n promise = LookupTableCachesActions.update(stateCache);\n }\n\n promise.then(() => { saved(); });\n };\n\n _sanitizeTitle = (title) => {\n return title.trim().replace(/\\W+/g, '-').toLowerCase();\n };\n\n _validationState = (fieldName) => {\n const { validationErrors } = this.props;\n\n if (validationErrors[fieldName]) {\n return 'error';\n }\n return null;\n };\n\n _validationMessage = (fieldName, defaultText) => {\n const { validationErrors } = this.props;\n\n if (validationErrors[fieldName]) {\n return (\n \n {defaultText}\n \n {validationErrors[fieldName][0]}\n \n );\n }\n return {defaultText};\n };\n\n _renderTitle = (title, typeName, create) => {\n const TagName = create ? 'h3' : 'h2';\n return {title} ({typeName}) ;\n };\n\n render() {\n const { cache } = this.state;\n const {\n create,\n type,\n title,\n } = this.props;\n\n const cachePlugins = PluginStore.exports('lookupTableCaches');\n\n const plugin = cachePlugins.filter((p) => p.type === type);\n let configFieldSet = null;\n let documentationComponent = null;\n let pluginDisplayName = cache.config.type;\n if (plugin && plugin.length > 0) {\n const p = plugin[0];\n pluginDisplayName = p.displayName;\n configFieldSet = React.createElement(p.formComponent, {\n config: cache.config,\n handleFormEvent: this._onConfigChange,\n updateConfig: this._updateConfig,\n validationMessage: this._validationMessage,\n validationState: this._validationState,\n });\n if (p.documentationComponent) {\n documentationComponent = React.createElement(p.documentationComponent);\n }\n }\n let documentationColumn = null;\n let formRowWidth = 8; // If there is no documentation component, we don't use the complete page width\n if (documentationComponent) {\n formRowWidth = 6;\n documentationColumn = (\n \n {documentationComponent}\n \n );\n }\n\n return (\n <>\n {this._renderTitle(title, pluginDisplayName, create)}\n \n \n \n \n {documentationColumn}\n
\n >\n );\n }\n}\n\nexport default CacheForm;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport naturalSort from 'javascript-natural-sort';\n\nimport { Row, Col } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\nimport { CacheForm } from 'components/lookup-tables';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport ObjectUtils from 'util/ObjectUtils';\n\nclass CacheCreate 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 state = {\n cache: undefined,\n type: undefined,\n };\n\n _onTypeSelect = (cacheType) => {\n const { types } = this.props;\n this.setState({\n type: cacheType,\n cache: {\n id: null,\n title: '',\n name: '',\n description: '',\n config: ObjectUtils.clone(types[cacheType].default_config),\n },\n });\n };\n\n render() {\n const {\n types,\n validate,\n validationErrors,\n saved,\n } = this.props;\n const { type, cache } = this.state;\n const cachePlugins = {};\n PluginStore.exports('lookupTableCaches').forEach((p) => {\n cachePlugins[p.type] = p;\n });\n\n const sortedCaches = Object.keys(types).map((key) => {\n const typeItem = types[key];\n return { value: typeItem.type, label: cachePlugins[typeItem.type].displayName };\n }).sort((a, b) => naturalSort(a.label.toLowerCase(), b.label.toLowerCase()));\n\n return (\n \n \n \n \n \n
\n {cache && (\n \n \n \n \n
\n )}\n \n );\n }\n}\n\n\nexport default CacheCreate;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport naturalSort from 'javascript-natural-sort';\n\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport { Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\n\nclass CachePicker extends React.Component {\n static propTypes = {\n onSelect: PropTypes.func.isRequired,\n selectedId: PropTypes.string,\n caches: PropTypes.array,\n pagination: PropTypes.object,\n };\n\n static defaultProps = {\n selectedId: null,\n caches: [],\n pagination: {},\n };\n\n render() {\n const cachePlugins = {};\n PluginStore.exports('lookupTableCaches').forEach((p) => {\n cachePlugins[p.type] = p;\n });\n\n const sortedCaches = this.props.caches.map((cache) => {\n return { value: cache.id, label: `${cache.title} (${cache.name})` };\n }).sort((a, b) => naturalSort(a.label.toLowerCase(), b.label.toLowerCase()));\n\n return (\n \n );\n }\n}\n\nexport default CachePicker;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Spinner } from 'components/common';\n\nimport CombinedProvider from 'injection/CombinedProvider';\n\nconst { LookupTableCachesActions, LookupTableCachesStore } = CombinedProvider.get(\n 'LookupTableCaches',\n);\n\nconst CachesContainer = createReactClass({\n displayName: 'CachesContainer',\n\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 ;\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 return {childrenWithProps};\n },\n});\n\nexport default CachesContainer;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { LinkContainer } from 'react-router-bootstrap';\nimport { Link } from 'react-router';\n\nimport Routes from 'routing/Routes';\nimport CombinedProvider from 'injection/CombinedProvider';\n\nimport { Button } from 'components/graylog';\nimport { ErrorPopover } from 'components/lookup-tables';\nimport { ContentPackMarker } from 'components/common';\nimport { MetricContainer, CounterRate } from 'components/metrics';\n\nconst { LookupTableDataAdaptersActions } = CombinedProvider.get('LookupTableDataAdapters');\n\nclass DataAdapterTableEntry extends React.Component {\n static propTypes = {\n adapter: PropTypes.object.isRequired,\n error: PropTypes.string,\n };\n\n static defaultProps = {\n error: null,\n };\n\n _onDelete = () => {\n const { adapter } = this.props;\n\n // eslint-disable-next-line no-alert\n if (window.confirm(`Are you sure you want to delete data adapter \"${adapter.title}\"?`)) {\n LookupTableDataAdaptersActions.delete(adapter.id).then(() => LookupTableDataAdaptersActions.reloadPage());\n }\n };\n\n render() {\n const { adapter, error } = this.props;\n\n return (\n \n \n \n {error && }\n {adapter.title}\n \n \n {adapter.description} \n {adapter.name} \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default DataAdapterTableEntry;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { LinkContainer } from 'react-router-bootstrap';\n\nimport { Row, Col, Table, Popover, OverlayTrigger, Button } from 'components/graylog';\nimport { PaginatedList, SearchForm, Spinner, Icon } from 'components/common';\nimport DataAdapterTableEntry from 'components/lookup-tables/DataAdapterTableEntry';\nimport Routes from 'routing/Routes';\nimport CombinedProvider from 'injection/CombinedProvider';\n\nimport Styles from './Overview.css';\n\nconst { LookupTableDataAdaptersActions } = CombinedProvider.get('LookupTableDataAdapters');\n\nclass DataAdaptersOverview extends React.Component {\n static propTypes = {\n dataAdapters: PropTypes.array.isRequired,\n pagination: PropTypes.object.isRequired,\n errorStates: PropTypes.object.isRequired,\n };\n\n _onPageChange = (newPage, newPerPage) => {\n const { pagination } = this.props;\n\n LookupTableDataAdaptersActions.searchPaginated(newPage, newPerPage, pagination.query);\n };\n\n _onSearch = (query, resetLoadingStateCb) => {\n const { pagination } = this.props;\n\n LookupTableDataAdaptersActions\n .searchPaginated(pagination.page, pagination.per_page, query)\n .then(resetLoadingStateCb);\n };\n\n _onReset = () => {\n const { pagination } = this.props;\n\n LookupTableDataAdaptersActions.searchPaginated(pagination.page, pagination.per_page);\n };\n\n _helpPopover = () => {\n return (\n \n Available search fields
\n \n \n \n Field \n Description \n \n \n \n \n id \n Data Adapter ID \n \n \n title \n The title of the data adapter \n \n \n name \n The reference name of the data adapter \n \n \n description \n The description of data adapter \n \n \n
\n Example
\n \n Find data adapters 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 };\n\n render() {\n const { dataAdapters, errorStates, pagination } = this.props;\n\n if (!dataAdapters) {\n return ;\n }\n\n const dataAdapterEntries = dataAdapters.map((dataAdapter) => {\n return (\n \n );\n });\n\n return (\n \n \n \n \n Configured lookup Data Adapters\n \n {pagination.total} total\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n Title \n Description \n Name \n Throughput \n Actions \n \n \n {dataAdapterEntries}\n
\n \n \n
\n \n );\n }\n}\n\nexport default DataAdaptersOverview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { LinkContainer } from 'react-router-bootstrap';\n\nimport { Row, Col, Button } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport { ContentPackMarker } from 'components/common';\nimport FormsUtils from 'util/FormsUtils';\nimport Routes from 'routing/Routes';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport CombinedProvider from 'injection/CombinedProvider';\n\nimport Styles from './ConfigSummary.css';\n\nconst { LookupTableDataAdaptersActions } = CombinedProvider.get('LookupTableDataAdapters');\n\nclass DataAdapter extends React.Component {\n static propTypes = {\n dataAdapter: PropTypes.object.isRequired,\n };\n\n state = {\n lookupKey: null,\n lookupResult: null,\n };\n\n _onChange = (event) => {\n this.setState({ lookupKey: FormsUtils.getValueFromInput(event.target) });\n };\n\n _lookupKey = (e) => {\n const { dataAdapter } = this.props;\n const { lookupKey } = this.state;\n\n e.preventDefault();\n LookupTableDataAdaptersActions.lookup(dataAdapter.name, lookupKey).then((result) => {\n this.setState({ lookupResult: result });\n });\n };\n\n render() {\n const plugins = {};\n PluginStore.exports('lookupTableAdapters').forEach((p) => {\n plugins[p.type] = p;\n });\n\n const { dataAdapter } = this.props;\n const { lookupKey, lookupResult } = this.state;\n const plugin = plugins[dataAdapter.config.type];\n if (!plugin) {\n return Unknown data adapter type {dataAdapter.config.type}. Is the plugin missing?
;\n }\n\n const summary = plugin.summaryComponent;\n return (\n \n \n \n {dataAdapter.title}\n \n {' '}\n ({plugin.displayName})\n
\n \n \n - Description
\n - {dataAdapter.description || No description.}
\n
\n \n Configuration
\n \n {React.createElement(summary, { dataAdapter: dataAdapter })}\n \n \n \n \n \n \n Test lookup
\n You can manually trigger the data adapter using this form. The data will be not cached.
\n \n { lookupResult && (\n \n Lookup result
\n {JSON.stringify(lookupResult, null, 2)}
\n \n )}\n \n
\n );\n }\n}\n\nexport default DataAdapter;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport _ from 'lodash';\n\nimport { Col, Row, Button } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport ObjectUtils from 'util/ObjectUtils';\nimport FormsUtils from 'util/FormsUtils';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport CombinedProvider from 'injection/CombinedProvider';\nimport { TimeUnitInput } from 'components/common';\n\nconst { LookupTableDataAdaptersActions } = CombinedProvider.get('LookupTableDataAdapters');\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 };\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 };\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 if (prevProps.type !== currentType) {\n this._input.getInputDOMNode().focus();\n }\n const { dataAdapter } = this.props;\n if (_.isEqual(dataAdapter, prevProps.dataAdapter)) {\n // props haven't changed, don't update our state from them\n return;\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 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 _validate = (adapter) => {\n const { validate } = this.props;\n\n // first cancel outstanding validation timer, we have new data\n this._clearTimer();\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 dataAdapter[event.target.name] = FormsUtils.getValueFromInput(event.target);\n let { generateAdapterName } = this.state;\n if (generateAdapterName && event.target.name === 'title') {\n // generate the name\n dataAdapter.name = this._sanitizeTitle(dataAdapter.title);\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 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 dataAdapter.config[event.target.name] = FormsUtils.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 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 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 } = this.props;\n\n let promise;\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 _sanitizeTitle = (title) => {\n return title.trim().replace(/\\W+/g, '-').toLowerCase();\n };\n\n _validationState = (fieldName) => {\n const { validationErrors } = this.props;\n if (validationErrors[fieldName]) {\n return 'error';\n }\n return null;\n };\n\n _validationMessage = (fieldName, defaultText) => {\n const { validationErrors } = this.props;\n if (validationErrors[fieldName]) {\n return (\n \n {defaultText}\n \n {validationErrors[fieldName][0]}\n \n );\n }\n return {defaultText};\n };\n\n _renderTitle = (title, typeName, create) => {\n const TagName = create ? 'h3' : 'h2';\n return {title} ({typeName}) ;\n };\n\n render() {\n const { dataAdapter } = this.state;\n const { create, type, title } = this.props;\n const adapterPlugins = PluginStore.exports('lookupTableAdapters');\n\n const plugin = adapterPlugins.filter((p) => p.type === type);\n let configFieldSet = null;\n let documentationComponent = null;\n let pluginDisplayName = dataAdapter.config.type;\n if (plugin && plugin.length > 0) {\n const p = plugin[0];\n pluginDisplayName = p.displayName;\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 });\n if (p.documentationComponent) {\n documentationComponent = React.createElement(p.documentationComponent, {\n dataAdapterId: dataAdapter.id,\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 // width\n if (documentationComponent) {\n formRowWidth = 6;\n documentationColumn = (\n \n {documentationComponent}\n \n );\n }\n return (\n <>\n {this._renderTitle(title, pluginDisplayName, create)}\n \n \n \n \n {documentationColumn}\n
\n >\n );\n }\n}\n\nexport default DataAdapterForm;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport naturalSort from 'javascript-natural-sort';\n\nimport { Row, Col } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\nimport { DataAdapterForm } from 'components/lookup-tables';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\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 state = {\n dataAdapter: undefined,\n type: undefined,\n };\n\n _onTypeSelect = (adapterType) => {\n const { types } = this.props;\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 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 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 return { value: typeItem.type, disabled: true, label: `${typeItem.type} - missing or invalid plugin` };\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 \n \n \n \n \n
\n {dataAdapter && (\n \n \n \n \n
\n )}\n \n );\n }\n}\n\n\nexport default DataAdapterCreate;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport naturalSort from 'javascript-natural-sort';\n\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport { Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\n\nclass DataAdapterPicker extends React.Component {\n static propTypes = {\n onSelect: PropTypes.func.isRequired,\n selectedId: PropTypes.string,\n dataAdapters: PropTypes.array,\n pagination: PropTypes.object,\n };\n\n static defaultProps = {\n selectedId: null,\n dataAdapters: [],\n pagination: {},\n };\n\n render() {\n const adapterPlugins = {};\n PluginStore.exports('lookupTableAdapters').forEach((p) => {\n adapterPlugins[p.type] = p;\n });\n\n const sortedAdapters = this.props.dataAdapters.map((adapter) => {\n return { value: adapter.id, label: `${adapter.title} (${adapter.name})` };\n }).sort((a, b) => naturalSort(a.label.toLowerCase(), b.label.toLowerCase()));\n\n return (\n \n );\n }\n}\n\nexport default DataAdapterPicker;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Spinner } from 'components/common';\n\nimport CombinedProvider from 'injection/CombinedProvider';\n\nconst { LookupTableDataAdaptersActions, LookupTableDataAdaptersStore } = CombinedProvider.get(\n 'LookupTableDataAdapters',\n);\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 ;\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 return {childrenWithProps};\n },\n});\n\nexport default DataAdaptersContainer;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { OverlayTrigger, Popover } from 'components/graylog';\nimport { Icon } from 'components/common';\n\nimport Styles from './ErrorPopover.css';\n\nclass ErrorPopover extends React.Component {\n static propTypes = {\n errorText: PropTypes.string.isRequired,\n title: PropTypes.string,\n placement: PropTypes.string,\n };\n\n static defaultProps = {\n title: 'Error',\n placement: 'bottom',\n };\n\n render() {\n const overlay = (\n \n {this.props.errorText}\n \n );\n\n return (\n \n \n \n \n \n );\n }\n}\n\nexport default ErrorPopover;\n","import {} from './adapters';\nimport {} from './caches';\n\nexport { default as LookupTablesOverview } from './LookupTablesOverview';\nexport { default as LUTTableEntry } from './LUTTableEntry';\nexport { default as LookupTable } from './LookupTable';\nexport { default as LookupTableForm } from './LookupTableForm';\nexport { default as LookupTableCreate } from './LookupTableCreate';\n\nexport { default as CachesOverview } from './CachesOverview';\nexport { default as CacheTableEntry } from './CacheTableEntry';\nexport { default as Cache } from './Cache';\nexport { default as CacheForm } from './CacheForm';\nexport { default as CacheCreate } from './CacheCreate';\nexport { default as CachePicker } from './CachePicker';\nexport { default as CachesContainer } from './CachesContainer';\n\nexport { default as DataAdaptersOverview } from './DataAdaptersOverview';\nexport { default as DataAdapterTableEntry } from './DataAdapterTableEntry';\nexport { default as DataAdapter } from './DataAdapter';\nexport { default as DataAdapterForm } from './DataAdapterForm';\nexport { default as DataAdapterCreate } from './DataAdapterCreate';\nexport { default as DataAdapterPicker } from './DataAdapterPicker';\nexport { default as DataAdaptersContainer } from './DataAdaptersContainer';\n\nexport { default as ErrorPopover } from './ErrorPopover';\n","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"._1qliChIAbQYqVrFfaTiTy9{cursor:help;padding:0 0 0 2px;margin-left:5px}._2jXteLgzpBtFWvFPnfUkV-{max-width:500px;min-width:350px}._2WFFE0mtHkjwPnB-AyWaF3{width:15%}._233VXfCpnyGagexZJob_3d{max-width:50%;width:35%}._1A0bRNm9Lja5TNDpcq5GMl,._1o34aBTCHAVqXPvFVXyXL2,._3mNRMVGxIBw1lWwXizVBF5{width:15%}.tetBatbx0yDx--vEMr50r{min-width:100px}overviewTable{width:100%;table-layout:fixed}\", \"\"]);\n\n// exports\nexports.locals = {\n\t\"searchHelpButton\": \"_1qliChIAbQYqVrFfaTiTy9\",\n\t\"popoverWide\": \"_2jXteLgzpBtFWvFPnfUkV-\",\n\t\"rowTitle\": \"_2WFFE0mtHkjwPnB-AyWaF3\",\n\t\"rowDescription\": \"_233VXfCpnyGagexZJob_3d\",\n\t\"rowName\": \"_3mNRMVGxIBw1lWwXizVBF5\",\n\t\"rowCache\": \"_1A0bRNm9Lja5TNDpcq5GMl\",\n\t\"rowAdapter\": \"_1o34aBTCHAVqXPvFVXyXL2\",\n\t\"rowActions\": \"tetBatbx0yDx--vEMr50r\"\n};","\nvar content = require(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./ConfigSummary.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./ConfigSummary.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./ConfigSummary.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","\nvar content = require(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./ErrorPopover.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./ErrorPopover.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./ErrorPopover.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"._3Av-URosScR8mPL_KeNzFe dl{margin-top:10px}._3Av-URosScR8mPL_KeNzFe dt{float:left;clear:left}._3Av-URosScR8mPL_KeNzFe dd{margin-left:150px;word-wrap:break-word}._3Av-URosScR8mPL_KeNzFe dd:not(:last-child){border-bottom:1px solid #ececec;margin-bottom:5px;padding-bottom:5px}\", \"\"]);\n\n// exports\nexports.locals = {\n\t\"config\": \"_3Av-URosScR8mPL_KeNzFe\"\n};","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"._2mHWy-VaLgIlqVN58WFlSr{max-width:400px}._1jmVzNrm3Ff2ywVsgBUxAJ{margin-right:5px}\", \"\"]);\n\n// exports\nexports.locals = {\n\t\"overlay\": \"_2mHWy-VaLgIlqVN58WFlSr\",\n\t\"trigger\": \"_1jmVzNrm3Ff2ywVsgBUxAJ\"\n};","\nvar content = require(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./Overview.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./Overview.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./Overview.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}"],"sourceRoot":""}