web-interface.assets.325e2d4b-2533.0de4abcf3cc2cdb98480.js.map Maven / Gradle / Ivy
{"version":3,"file":"325e2d4b-2533.0de4abcf3cc2cdb98480.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/inputs/InputDropdown.tsx","webpack://graylog-web-interface/./src/components/inputs/CreateInputControl.jsx","webpack://graylog-web-interface/./src/components/inputs/InputForm.jsx","webpack://graylog-web-interface/./src/components/inputs/InputListItem.jsx","webpack://graylog-web-interface/./src/stores/nodes/SingleNodeStore.js","webpack://graylog-web-interface/./src/components/inputs/InputsList.jsx","webpack://graylog-web-interface/./src/logic/inputs/InputStateComparator.js","webpack://graylog-web-interface/./src/components/inputs/InputStateBadge.jsx","webpack://graylog-web-interface/./src/components/inputs/InputStateControl.jsx","webpack://graylog-web-interface/./src/components/inputs/InputThroughput.jsx","webpack://graylog-web-interface/./src/components/inputs/InputStaticFields.jsx","webpack://graylog-web-interface/./src/components/inputs/NodeOrGlobalSelect.tsx","webpack://graylog-web-interface/./src/components/inputs/StaticFieldForm.jsx","webpack://graylog-web-interface/./src/stores/inputs/InputStatesStore.js","webpack://graylog-web-interface/./src/stores/inputs/InputTypesStore.ts","webpack://graylog-web-interface/./src/util/SortUtils.ts"],"sourcesContent":["/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport * as PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport * as Immutable from 'immutable';\n\nimport { Button, Input } from 'components/bootstrap';\nimport Spinner from 'components/common/Spinner';\n\nconst LoaderContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n\n .form-group {\n margin: 0 15px 0 0;\n }\n`;\n\nconst StyledInputDropdown = styled(Input)`\n min-width: 400px;\n`;\n\nconst PLACEHOLDER = 'placeholder';\n\ntype InputType = {\n id: string,\n title: string,\n type: string,\n};\n\nconst _formatInput = ({ id, title, type }: InputType) => {\n return ;\n};\n\nconst _sortByTitle = (input1: InputType, input2: InputType) => input1.title.localeCompare(input2.title);\n\nconst StaticInput = ({ input: { type, title } }: { input: InputType }) => (\n \n \n \n);\n\ntype Props = {\n disabled?: boolean,\n inputs: Immutable.Map,\n preselectedInputId?: string,\n onLoadMessage: (inputId: string) => any,\n title: string,\n};\n\nconst InputDropdown = ({ disabled, inputs, onLoadMessage, preselectedInputId, title }: Props) => {\n const [selectedInput, setSelectedInput] = useState(preselectedInputId || PLACEHOLDER);\n const onSelectedInputChange = useCallback((event) => setSelectedInput(event.target.value), []);\n const _onLoadMessage = useCallback(() => onLoadMessage(selectedInput), [onLoadMessage, selectedInput]);\n const preselectedInput = useMemo(() => inputs?.get(preselectedInputId), [inputs, preselectedInputId]);\n\n // When an input is pre-selected, show a static dropdown\n if (preselectedInput) {\n return (\n \n \n\n \n \n );\n }\n\n if (inputs) {\n const inputOptions = inputs.sort(_sortByTitle).map(_formatInput);\n\n return (\n \n \n \n {inputOptions.toArray()}\n \n\n \n \n );\n }\n\n return ;\n};\n\nInputDropdown.propTypes = {\n inputs: PropTypes.object,\n title: PropTypes.string.isRequired,\n preselectedInputId: PropTypes.string,\n onLoadMessage: PropTypes.func,\n disabled: PropTypes.bool,\n};\n\nInputDropdown.defaultProps = {\n inputs: Immutable.Map(),\n onLoadMessage: () => {},\n preselectedInputId: undefined,\n disabled: false,\n};\n\nexport default InputDropdown;\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// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport styled from 'styled-components';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { Col, Row, Button } from 'components/bootstrap';\nimport { ExternalLinkButton, Select } from 'components/common';\nimport { InputForm } from 'components/inputs';\nimport { InputsActions } from 'stores/inputs/InputsStore';\nimport { InputTypesActions, InputTypesStore } from 'stores/inputs/InputTypesStore';\n\nconst NewInputRow = styled(Row)`\n margin-bottom: 8px;\n`;\n\nconst CreateInputControl = createReactClass({\n // eslint-disable-next-line react/no-unused-class-component-methods\n displayName: 'CreateInputControl',\n mixins: [Reflux.connect(InputTypesStore)],\n\n getInitialState() {\n return {\n selectedInput: undefined,\n selectedInputDefinition: undefined,\n };\n },\n\n _formatSelectOptions() {\n let options = [];\n\n const { inputTypes } = this.state;\n\n if (inputTypes) {\n const inputTypesIds = Object.keys(inputTypes);\n\n options = inputTypesIds.map((id) => {\n return { value: id, label: inputTypes[id] };\n });\n\n options.sort((inputTypeA, inputTypeB) => inputTypeA.label.toLowerCase().localeCompare(inputTypeB.label.toLowerCase()));\n } else {\n options.push({ value: 'none', label: 'No inputs available', disabled: true });\n }\n\n return options;\n },\n\n _onInputSelect(selectedInput) {\n if (selectedInput === '') {\n this.setState(this.getInitialState());\n }\n\n this.setState({ selectedInput: selectedInput });\n InputTypesActions.get.triggerPromise(selectedInput).then((inputDefinition) => this.setState({ selectedInputDefinition: inputDefinition }));\n },\n\n _openModal(event) {\n event.preventDefault();\n const { selectedInput } = this.state;\n\n const customConfiguration = PluginStore.exports('inputConfiguration')\n .find((inputConfig) => inputConfig.type === selectedInput);\n\n if (customConfiguration) {\n const onClose = () => this.setState({ customInputsComponent: undefined });\n const CustomInputsConfiguration = customConfiguration.component;\n\n this.setState({\n customInputsComponent: ,\n });\n }\n\n this.configurationForm.open();\n },\n\n _createInput(data) {\n InputsActions.create(data).then(() => {\n this.setState(this.getInitialState());\n });\n },\n\n render() {\n let inputModal;\n const { selectedInputDefinition, selectedInput, inputTypes, customInputsComponent } = this.state;\n\n if (selectedInputDefinition && !customInputsComponent) {\n const inputTypeName = inputTypes[selectedInput];\n\n inputModal = (\n { this.configurationForm = configurationForm; }}\n key=\"configuration-form-input\"\n configFields={selectedInputDefinition.requested_configuration}\n title={Launch new {inputTypeName} input}\n submitButtonText=\"Launch Input\"\n helpBlock=\"Select a name of your new input that describes it.\"\n typeName={selectedInput}\n submitAction={this._createInput} />\n );\n }\n\n return (\n \n \n \n {inputModal || customInputsComponent}\n \n \n );\n },\n});\n\nexport default CreateInputControl;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport jQuery from 'jquery';\n\nimport { NodeOrGlobalSelect } from 'components/inputs';\nimport { ConfigurationForm } from 'components/configurationforms';\n\nclass InputForm extends React.Component {\n static propTypes = {\n globalValue: PropTypes.bool,\n nodeValue: PropTypes.string,\n titleValue: PropTypes.string,\n submitAction: PropTypes.func.isRequired,\n values: PropTypes.object,\n submitButtonText: PropTypes.string.isRequired,\n };\n\n static defaultProps = {\n globalValue: undefined,\n nodeValue: undefined,\n titleValue: undefined,\n values: undefined,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n global: this.props.globalValue !== undefined ? this.props.globalValue : false,\n node: this.props.nodeValue !== undefined ? this.props.nodeValue : undefined,\n };\n }\n\n _handleChange = (field, value) => {\n const state = {};\n\n state[field] = value;\n this.setState(state);\n };\n\n _onSubmit = (data) => {\n const newData = jQuery.extend(data, { global: this.state.global, node: this.state.node });\n\n this.props.submitAction(newData);\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n open = () => {\n this.configurationForm.open();\n };\n\n getValues = () => {\n const { values } = this.props;\n\n if (values) {\n return values;\n }\n\n if (this.configurationForm) {\n return this.configurationForm.getValue().configuration;\n }\n\n return {};\n };\n\n getTitleValue = () => {\n const { titleValue } = this.props;\n\n if (titleValue) {\n return titleValue;\n }\n\n if (this.configurationForm) {\n return this.configurationForm.getValue().titleValue;\n }\n\n return '';\n };\n\n render() {\n const values = this.getValues();\n const titleValue = this.getTitleValue();\n\n return (\n { this.configurationForm = configurationForm; }}\n values={values}\n titleValue={titleValue}\n submitAction={this._onSubmit}>\n \n \n );\n }\n}\n\nexport default InputForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { LinkContainer } from 'components/common/router';\nimport { DropdownButton, MenuItem, Col, Button } from 'components/bootstrap';\nimport { EntityListItem, IfPermitted, LinkToNode, Spinner } from 'components/common';\nimport { ConfigurationWell } from 'components/configurationforms';\nimport PermissionsMixin from 'util/PermissionsMixin';\nimport Routes from 'routing/Routes';\nimport { InputForm, InputStateBadge, InputStateControl, InputStaticFields, InputThroughput, StaticFieldForm } from 'components/inputs';\nimport { InputsActions } from 'stores/inputs/InputsStore';\nimport { InputTypesStore } from 'stores/inputs/InputTypesStore';\n\nconst InputListItem = createReactClass({\n // eslint-disable-next-line react/no-unused-class-component-methods\n displayName: 'InputListItem',\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n propTypes: {\n input: PropTypes.object.isRequired,\n currentNode: PropTypes.object.isRequired,\n permissions: PropTypes.array.isRequired,\n },\n\n mixins: [PermissionsMixin, Reflux.connect(InputTypesStore)],\n\n _deleteInput() {\n // eslint-disable-next-line no-alert\n if (window.confirm(`Do you really want to delete input '${this.props.input.title}'?`)) {\n InputsActions.delete(this.props.input);\n }\n },\n\n _openStaticFieldForm() {\n this.staticFieldForm.open();\n },\n\n _editInput() {\n this.configurationForm.open();\n },\n\n _updateInput(data) {\n InputsActions.update(this.props.input.id, data);\n },\n\n render() {\n if (!this.state.inputTypes) {\n return ;\n }\n\n const { input } = this.props;\n const definition = this.state.inputDescriptions[input.type];\n\n const titleSuffix = (\n \n {this.props.input.name}\n \n \n \n );\n\n const actions = [];\n\n if (this.isPermitted(this.props.permissions, ['searches:relative'])) {\n actions.push(\n \n \n ,\n );\n }\n\n if (this.isPermitted(this.props.permissions, [`inputs:edit:${this.props.input.id}`])) {\n let extractorRoute;\n\n if (this.props.input.global) {\n extractorRoute = Routes.global_input_extractors(this.props.input.id);\n } else {\n extractorRoute = Routes.local_input_extractors(this.props.currentNode.node_id, this.props.input.id);\n }\n\n actions.push(\n \n \n ,\n );\n\n actions.push( );\n }\n\n let showMetricsMenuItem;\n\n if (!this.props.input.global) {\n showMetricsMenuItem = (\n \n \n \n );\n }\n\n actions.push(\n \n \n \n \n\n {showMetricsMenuItem}\n\n \n \n \n\n \n \n \n \n \n \n ,\n );\n\n let subtitle;\n\n if (!this.props.input.global && this.props.input.node) {\n subtitle = (\n \n On node{' '} \n \n );\n }\n\n const inputForm = definition\n ? (\n { this.configurationForm = configurationForm; }}\n key={`edit-form-input-${input.id}`}\n globalValue={input.global}\n nodeValue={input.node}\n configFields={definition.requested_configuration}\n title={`Editing Input ${input.title}`}\n titleValue={input.title}\n typeName={input.type}\n includeTitleField\n submitAction={this._updateInput}\n submitButtonText=\"Update input\"\n values={input.attributes} />\n ) : null;\n\n const additionalContent = (\n \n \n \n { this.staticFieldForm = staticFieldForm; }} input={this.props.input} />\n \n \n \n \n \n {inputForm}\n \n );\n\n return (\n \n );\n },\n});\n\nexport default InputListItem;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\n\nimport * as URLUtils from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const SingleNodeActions = singletonActions(\n 'core.SingleNode',\n () => Reflux.createActions({\n get: { asyncResult: true },\n }),\n);\n\nexport const SingleNodeStore = singletonStore(\n 'core.SingleNode',\n () => Reflux.createStore({\n listenables: [SingleNodeActions],\n sourceUrl: '/system/cluster/node',\n node: undefined,\n\n init() {\n this._propagateState();\n },\n\n getInitialState() {\n return this._getNodeInfo();\n },\n\n _getNodeInfo() {\n return { node: this.node };\n },\n\n _propagateState() {\n this.trigger(this._getNodeInfo());\n },\n\n get(nodeId) {\n const promise = fetch('GET', URLUtils.qualifyUrl(nodeId ? URLUtils.concatURLPath(this.sourceUrl, nodeId) : this.sourceUrl))\n .then((response) => {\n this.node = response;\n this._propagateState();\n });\n\n SingleNodeActions.get.promise(promise);\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport styled from 'styled-components';\n\nimport { Row, Col } from 'components/bootstrap';\nimport { IfPermitted, Spinner, SearchForm } from 'components/common';\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport EntityList from 'components/common/EntityList';\nimport { InputsActions, InputsStore } from 'stores/inputs/InputsStore';\nimport { InputTypesActions } from 'stores/inputs/InputTypesStore';\nimport { SingleNodeActions, SingleNodeStore } from 'stores/nodes/SingleNodeStore';\n\nimport InputListItem from './InputListItem';\nimport CreateInputControl from './CreateInputControl';\n\nconst InputListRow = styled(Row)`\n h2 {\n margin-bottom: 5px;\n }\n\n .alert {\n margin-top: 10px;\n }\n\n .static-fields {\n margin-top: 10px;\n margin-left: 3px;\n\n ul {\n margin: 0;\n padding: 0;\n\n .remove-static-field {\n margin-left: 5px;\n }\n }\n }\n`;\n\nconst InputsList = createReactClass({\n displayName: 'InputsList',\n\n propTypes: {\n permissions: PropTypes.array.isRequired,\n node: PropTypes.object,\n },\n\n mixins: [Reflux.connect(SingleNodeStore), Reflux.listenTo(InputsStore, '_splitInputs')],\n\n getDefaultProps() {\n return {\n node: undefined,\n };\n },\n\n getInitialState() {\n return {\n globalInputs: undefined,\n localInputs: undefined,\n filteredGlobalInputs: undefined,\n filteredLocalInputs: undefined,\n filter: undefined,\n };\n },\n\n componentDidMount() {\n InputTypesActions.list();\n InputsActions.list();\n SingleNodeActions.get();\n },\n\n _splitInputs(state) {\n const { inputs } = state;\n const globalInputs = inputs\n .filter((input) => input.global === true)\n .sort((inputA, inputB) => naturalSortIgnoreCase(inputA.title, inputB.title));\n let localInputs = inputs\n .filter((input) => input.global === false)\n .sort((inputA, inputB) => naturalSortIgnoreCase(inputA.title, inputB.title));\n\n if (this.props.node) {\n localInputs = localInputs.filter((input) => input.node === this.props.node.node_id);\n }\n\n this.setState({\n globalInputs: globalInputs,\n localInputs: localInputs,\n });\n\n this._onFilterInputs(this.state.filter);\n },\n\n _isLoading() {\n return !(this.state.localInputs && this.state.globalInputs && this.state.node && this.state.filteredLocalInputs\n && this.state.filteredGlobalInputs);\n },\n\n _formatInput(input) {\n return ;\n },\n\n _nodeAffix() {\n return (this.props.node ? ' on this node' : '');\n },\n\n _onFilterInputs(filter, resetLoadingState) {\n const { globalInputs, localInputs } = this.state;\n const regExp = RegExp(filter, 'i');\n\n if (!globalInputs || !localInputs) {\n if (resetLoadingState) {\n resetLoadingState();\n }\n\n return;\n }\n\n if (!filter || filter.length <= 0) {\n this.setState({\n filteredGlobalInputs: globalInputs,\n filteredLocalInputs: localInputs,\n filter: undefined,\n });\n\n if (resetLoadingState) {\n resetLoadingState();\n }\n\n return;\n }\n\n const filterMethod = (input) => {\n return regExp.test(input.title);\n };\n\n const filteredGlobalInputs = this.state.globalInputs.filter(filterMethod);\n const filteredLocalInputs = this.state.localInputs.filter(filterMethod);\n\n this.setState({\n filteredGlobalInputs: filteredGlobalInputs,\n filteredLocalInputs: filteredLocalInputs,\n filter: filter,\n });\n\n if (resetLoadingState) {\n resetLoadingState();\n }\n },\n\n _onFilterReset() {\n const { globalInputs, localInputs } = this.state;\n\n this.setState({\n filteredGlobalInputs: globalInputs,\n filteredLocalInputs: localInputs,\n filter: undefined,\n });\n },\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n return (\n \n {!this.props.node\n && (\n \n \n \n )}\n\n \n \n \n
\n \n Global inputs\n \n {this.state.globalInputs.length} configured{this._nodeAffix()}\n
\n this._formatInput(input))} />\n
\n
\n \n Local inputs\n \n {this.state.localInputs.length} configured{this._nodeAffix()}\n
\n this._formatInput(input))} />\n \n \n \n );\n },\n});\n\nexport default InputsList;\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 */\nclass InputStateComparator {\n constructor() {\n this.mapping = {\n CREATED: 0,\n INITIALIZED: 1,\n INVALID_CONFIGURATION: 2,\n STARTING: 3,\n RUNNING: 4,\n FAILED: 2,\n STOPPING: 1,\n STOPPED: 0,\n TERMINATED: 0,\n };\n }\n\n compare(state1, state2) {\n return this.mapping[state1.toUpperCase()] - this.mapping[state2.toUpperCase()];\n }\n}\n\nexport default InputStateComparator;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { OverlayTrigger, LinkToNode, Spinner } from 'components/common';\nimport { Label, Popover } from 'components/bootstrap';\nimport InputStateComparator from 'logic/inputs/InputStateComparator';\nimport { InputStatesStore } from 'stores/inputs/InputStatesStore';\nimport { NodesStore } from 'stores/nodes/NodesStore';\n\nconst InputStateBadge = createReactClass({\n displayName: 'InputStateBadge',\n\n propTypes: {\n input: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connect(InputStatesStore), Reflux.connect(NodesStore)],\n comparator: new InputStateComparator(),\n\n _labelClassForState(sortedStates) {\n const { input } = this.props;\n const { nodes } = this.state;\n const nodesWithKnownState = sortedStates.reduce((numberOfNodes, state) => {\n return numberOfNodes + state.count;\n }, 0);\n\n if (input.global && nodesWithKnownState !== Object.keys(nodes).length) {\n return 'warning';\n }\n\n const { state } = sortedStates[0];\n\n switch (state) {\n case 'RUNNING':\n return 'success';\n case 'FAILED':\n case 'STOPPED':\n return 'danger';\n case 'STARTING':\n return 'info';\n default:\n return 'warning';\n }\n },\n\n _textForState(sortedStates) {\n const { input } = this.props;\n\n if (input.global) {\n return sortedStates.map((state) => `${state.count} ${state.state}`).join(', ');\n }\n\n return sortedStates[0].state;\n },\n\n _isLoading() {\n const { inputStates, nodes } = this.state;\n\n return !(inputStates && nodes);\n },\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n const { input } = this.props;\n const { inputStates } = this.state;\n const inputId = input.id;\n const sortedInputStates = {};\n\n if (inputStates[inputId]) {\n Object.keys(inputStates[inputId]).forEach((node) => {\n const { state } = inputStates[inputId][node];\n\n if (!sortedInputStates[state]) {\n sortedInputStates[state] = [];\n }\n\n sortedInputStates[state].push(node);\n });\n }\n\n const sorted = Object.keys(sortedInputStates).sort(this.comparator.compare.bind(this.comparator)).map((state) => {\n return { state: state, count: sortedInputStates[state].length };\n });\n\n if (sorted.length > 0) {\n const popOverText = sorted.map((state) => {\n return sortedInputStates[state.state].map((node) => {\n return : {state.state}
;\n });\n });\n const popover = (\n \n {popOverText}\n \n );\n\n return (\n \n \n \n );\n }\n\n const text = input.global || input.node === undefined ? '0 RUNNING' : 'NOT RUNNING';\n\n return (\n \n );\n },\n});\n\nexport default InputStateBadge;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Button } from 'components/bootstrap';\nimport { InputStatesStore } from 'stores/inputs/InputStatesStore';\n\nfunction inputStateFilter(state) {\n return state.inputStates ? state.inputStates[this.props.input.id] : undefined;\n}\n\nconst InputStateControl = createReactClass({\n displayName: 'InputStateControl',\n\n propTypes: {\n input: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connectFilter(InputStatesStore, 'inputState', inputStateFilter)],\n\n getInitialState() {\n return {\n loading: false,\n };\n },\n\n _isInputRunning() {\n if (!this.state.inputState) {\n return false;\n }\n\n const nodeIDs = Object.keys(this.state.inputState);\n\n if (nodeIDs.length === 0) {\n return false;\n }\n\n return nodeIDs.some((nodeID) => {\n const nodeState = this.state.inputState[nodeID];\n\n return nodeState.state === 'RUNNING';\n });\n },\n\n _startInput() {\n this.setState({ loading: true });\n\n InputStatesStore.start(this.props.input)\n .finally(() => this.setState({ loading: false }));\n },\n\n _stopInput() {\n this.setState({ loading: true });\n\n InputStatesStore.stop(this.props.input)\n .finally(() => this.setState({ loading: false }));\n },\n\n render() {\n if (this._isInputRunning()) {\n return (\n \n );\n }\n\n return (\n \n );\n },\n});\n\nexport default InputStateControl;\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-restricted-globals */\nimport PropTypes from 'prop-types';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport numeral from 'numeral';\nimport styled, { css } from 'styled-components';\n\nimport NumberUtils from 'util/NumberUtils';\nimport { Icon, LinkToNode, Spinner } from 'components/common';\nimport { MetricsActions, MetricsStore } from 'stores/metrics/MetricsStore';\n\nconst InputIO = styled.span(({ theme }) => css`\n .total {\n color: ${theme.colors.gray[70]};\n }\n\n .value {\n font-family: ${theme.fonts.family.monospace};\n }\n\n .persec {\n margin-left: 3px;\n }\n\n .channel-direction {\n position: relative;\n left: -1px;\n }\n\n .channel-direction-down {\n position: relative;\n top: 1px;\n }\n\n .channel-direction-up {\n position: relative;\n top: -1px;\n }\n`);\n\nconst InputThroughput = createReactClass({\n displayName: 'InputThroughput',\n\n propTypes: {\n input: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connect(MetricsStore)],\n\n getInitialState() {\n return {\n showDetails: false,\n };\n },\n\n UNSAFE_componentWillMount() {\n this._metricNames().forEach((metricName) => MetricsActions.addGlobal(metricName));\n },\n\n componentWillUnmount() {\n this._metricNames().forEach((metricName) => MetricsActions.removeGlobal(metricName));\n },\n\n _metricNames() {\n return [\n this._prefix('incomingMessages'),\n this._prefix('emptyMessages'),\n this._prefix('open_connections'),\n this._prefix('total_connections'),\n this._prefix('written_bytes_1sec'),\n this._prefix('written_bytes_total'),\n this._prefix('read_bytes_1sec'),\n this._prefix('read_bytes_total'),\n ];\n },\n\n _prefix(metric) {\n const { input } = this.props;\n\n return `${input.type}.${input.id}.${metric}`;\n },\n\n _getValueFromMetric(metric) {\n if (metric === null || metric === undefined) {\n return undefined;\n }\n\n switch (metric.type) {\n case 'meter':\n return metric.metric.rate.mean;\n case 'gauge':\n return metric.metric.value;\n case 'counter':\n return metric.metric.count;\n default:\n return undefined;\n }\n },\n\n _calculateMetrics(metrics) {\n const result = {};\n\n this._metricNames().forEach((metricName) => {\n result[metricName] = Object.keys(metrics).reduce((previous, nodeId) => {\n if (!metrics[nodeId][metricName]) {\n return previous;\n }\n\n const value = this._getValueFromMetric(metrics[nodeId][metricName]);\n\n if (value !== undefined) {\n return isNaN(previous) ? value : previous + value;\n }\n\n return previous;\n }, NaN);\n });\n\n return result;\n },\n\n _formatCount(count) {\n return numeral(count).format('0,0');\n },\n\n _formatNetworkStats(writtenBytes1Sec, writtenBytesTotal, readBytes1Sec, readBytesTotal) {\n const network = (\n \n Network IO: \n \n \n {NumberUtils.formatBytes(readBytes1Sec)} \n\n \n {NumberUtils.formatBytes(writtenBytes1Sec)}\n \n\n \n (total: \n \n {NumberUtils.formatBytes(readBytesTotal)} \n\n \n {NumberUtils.formatBytes(writtenBytesTotal)}\n )\n \n
\n \n );\n\n return network;\n },\n\n _formatConnections(openConnections, totalConnections) {\n return (\n \n Active connections: {this._formatCount(openConnections)} \n ({this._formatCount(totalConnections)} total)\n
\n \n );\n },\n\n _formatAllNodeDetails(metrics) {\n return (\n \n
\n {Object.keys(metrics).map((nodeId) => this._formatNodeDetails(nodeId, metrics[nodeId]))}\n \n );\n },\n\n _formatNodeDetails(nodeId, metrics) {\n const { input } = this.props;\n const openConnections = this._getValueFromMetric(metrics[this._prefix('open_connections')]);\n const totalConnections = this._getValueFromMetric(metrics[this._prefix('total_connections')]);\n const emptyMessages = this._getValueFromMetric(metrics[this._prefix('emptyMessages')]);\n const writtenBytes1Sec = this._getValueFromMetric(metrics[this._prefix('written_bytes_1sec')]);\n const writtenBytesTotal = this._getValueFromMetric(metrics[this._prefix('written_bytes_total')]);\n const readBytes1Sec = this._getValueFromMetric(metrics[this._prefix('read_bytes_1sec')]);\n const readBytesTotal = this._getValueFromMetric(metrics[this._prefix('read_bytes_total')]);\n\n return (\n \n \n
\n {!isNaN(writtenBytes1Sec) && this._formatNetworkStats(writtenBytes1Sec, writtenBytesTotal, readBytes1Sec, readBytesTotal)}\n {!isNaN(openConnections) && this._formatConnections(openConnections, totalConnections)}\n {!isNaN(emptyMessages) && Empty messages discarded: {this._formatCount(emptyMessages)}
}\n {isNaN(writtenBytes1Sec) && isNaN(openConnections) && No metrics available for this node}\n
\n \n );\n },\n\n _toggleShowDetails(evt) {\n evt.preventDefault();\n const { showDetails } = this.state;\n\n this.setState({ showDetails: !showDetails });\n },\n\n render() {\n const { metrics, showDetails } = this.state;\n const { input } = this.props;\n\n if (!metrics) {\n return ;\n }\n\n const calculatedMetrics = this._calculateMetrics(metrics);\n const incomingMessages = calculatedMetrics[this._prefix('incomingMessages')];\n const emptyMessages = calculatedMetrics[this._prefix('emptyMessages')];\n const openConnections = calculatedMetrics[this._prefix('open_connections')];\n const totalConnections = calculatedMetrics[this._prefix('total_connections')];\n const writtenBytes1Sec = calculatedMetrics[this._prefix('written_bytes_1sec')];\n const writtenBytesTotal = calculatedMetrics[this._prefix('written_bytes_total')];\n const readBytes1Sec = calculatedMetrics[this._prefix('read_bytes_1sec')];\n const readBytesTotal = calculatedMetrics[this._prefix('read_bytes_total')];\n\n return (\n \n Throughput / Metrics
\n \n {isNaN(incomingMessages) && isNaN(writtenBytes1Sec) && isNaN(openConnections) && No metrics available for this input}\n {!isNaN(incomingMessages) && 1 minute average rate: {this._formatCount(incomingMessages)} msg/s
}\n {!isNaN(writtenBytes1Sec) && this._formatNetworkStats(writtenBytes1Sec, writtenBytesTotal, readBytes1Sec, readBytesTotal)}\n {!isNaN(openConnections) && this._formatConnections(openConnections, totalConnections)}\n {!isNaN(emptyMessages) && Empty messages discarded: {this._formatCount(emptyMessages)}
}\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n {!isNaN(writtenBytes1Sec) && input.global && {showDetails ? 'Hide' : 'Show'} details}\n {!isNaN(writtenBytes1Sec) && showDetails && this._formatAllNodeDetails(metrics)}\n \n \n );\n },\n});\n\nexport default InputThroughput;\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 { Button } from 'components/bootstrap';\nimport { Icon } from 'components/common';\nimport { InputStaticFieldsStore } from 'stores/inputs/InputStaticFieldsStore';\n\nclass InputStaticFields extends React.Component {\n static propTypes = {\n input: PropTypes.object.isRequired,\n };\n\n _deleteStaticField = (fieldName) => {\n return () => {\n if (window.confirm(`Are you sure you want to remove static field '${fieldName}' from '${this.props.input.title}'?`)) {\n InputStaticFieldsStore.destroy(this.props.input, fieldName);\n }\n };\n };\n\n _deleteButton = (fieldName) => {\n return (\n \n );\n };\n\n _formatStaticFields = (staticFields) => {\n const formattedFields = [];\n const staticFieldNames = Object.keys(staticFields);\n\n staticFieldNames.forEach((fieldName) => {\n formattedFields.push(\n \n {fieldName}: {staticFields[fieldName]} {this._deleteButton(fieldName)}\n ,\n );\n });\n\n return formattedFields;\n };\n\n render() {\n const staticFieldNames = Object.keys(this.props.input.static_fields);\n\n if (staticFieldNames.length === 0) {\n return ;\n }\n\n return (\n \n Static fields
\n \n {this._formatStaticFields(this.props.input.static_fields)}\n
\n \n );\n }\n}\n\nexport default InputStaticFields;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useState, useEffect } from 'react';\n\nimport { useStore } from 'stores/connect';\nimport { Input } from 'components/bootstrap';\nimport { Spinner } from 'components/common';\nimport { NodesStore } from 'stores/nodes/NodesStore';\n\ntype Props = {\n global: boolean,\n node: string,\n onChange: (type: 'node' | 'global', value: boolean | string | undefined | null) => void,\n};\n\nconst NodeOrGlobalSelect = ({ global = false, node, onChange }: Props) => {\n const { nodes } = useStore(NodesStore);\n const [globalState, setGlobal] = useState(global);\n const [nodeState, setNode] = useState(node);\n\n useEffect(() => {\n if (!node && nodes) {\n const nodeIds = Object.keys(nodes);\n\n if (nodeIds.length === 1) {\n onChange('node', nodeIds[0]);\n setNode(nodeIds[0]);\n }\n }\n }, [nodes]);\n\n const _onChangeGlobal = useCallback((evt) => {\n const isGlobal = evt.target.checked;\n\n setGlobal(isGlobal);\n\n if (isGlobal) {\n setNode('placeholder');\n onChange('node', undefined);\n } else {\n onChange('node', nodeState);\n }\n\n onChange('global', isGlobal);\n }, [onChange, nodeState, setNode, setGlobal]);\n\n const _onChangeNode = useCallback((evt) => {\n setNode(evt.target.value);\n onChange('node', evt.target.value);\n }, [setNode, onChange]);\n\n if (!nodes) {\n return ;\n }\n\n const options = Object.keys(nodes)\n .map((nodeId) => {\n return ;\n });\n\n const nodeSelect = !globalState ? (\n \n \n {options}\n \n ) : null;\n\n return (\n \n \n {nodeSelect}\n \n );\n};\n\nNodeOrGlobalSelect.propTypes = {\n global: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n node: PropTypes.string,\n};\n\nNodeOrGlobalSelect.defaultProps = {\n global: false,\n node: undefined,\n};\n\nexport default NodeOrGlobalSelect;\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 { BootstrapModalForm, Input } from 'components/bootstrap';\nimport { InputStaticFieldsStore } from 'stores/inputs/InputStaticFieldsStore';\n\nclass StaticFieldForm extends React.Component {\n static propTypes = {\n input: PropTypes.object.isRequired,\n };\n\n open = () => {\n this.modal.open();\n };\n\n _addStaticField = () => {\n const fieldName = this.fieldName.getValue();\n const fieldValue = this.fieldValue.getValue();\n\n InputStaticFieldsStore.create(this.props.input, fieldName, fieldValue).then(() => this.modal.close());\n };\n\n render() {\n return (\n { this.modal = modal; }}\n title=\"Add static field\"\n submitButtonText=\"Add field\"\n onSubmitForm={this._addStaticField}>\n Define a static field that is added to every message that comes in via this input. The field is not\n overwritten If the message already has that key. Key must only contain alphanumeric characters or\n underscores and not be a reserved field.\n
\n { this.fieldName = fieldName; }}\n type=\"text\"\n id=\"field-name\"\n label=\"Field name\"\n required\n pattern=\"[A-Za-z0-9_]*\"\n title=\"Should consist only of alphanumeric characters and underscores.\"\n autoFocus />\n { this.fieldValue = fieldValue; }}\n type=\"text\"\n id=\"field-value\"\n label=\"Field value\"\n required />\n \n );\n }\n}\n\nexport default StaticFieldForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\n\nimport UserNotification from 'util/UserNotification';\nimport * as URLUtils from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore } from 'logic/singleton';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const InputStatesStore = singletonStore(\n 'core.InputStates',\n () => Reflux.createStore({\n listenables: [],\n\n init() {\n this.list();\n },\n\n getInitialState() {\n return { inputStates: this.inputStates };\n },\n\n list() {\n const url = URLUtils.qualifyUrl(ApiRoutes.ClusterInputStatesController.list().url);\n\n return fetch('GET', url)\n .then((response) => {\n const result = {};\n\n Object.keys(response).forEach((node) => {\n if (!response[node]) {\n return;\n }\n\n response[node].forEach((input) => {\n if (!result[input.id]) {\n result[input.id] = {};\n }\n\n result[input.id][node] = input;\n });\n });\n\n this.inputStates = result;\n this.trigger({ inputStates: this.inputStates });\n\n return result;\n });\n },\n\n _checkInputStateChangeResponse(input, response, action) {\n const nodes = Object.keys(response).filter((node) => (input.global ? true : node === input.node));\n const failedNodes = nodes.filter((nodeId) => response[nodeId] === null);\n\n if (failedNodes.length === 0) {\n UserNotification.success(`Request to ${action.toLowerCase()} input '${input.title}' was sent successfully.`,\n `Input '${input.title}' will be ${action === 'START' ? 'started' : 'stopped'} shortly`);\n } else if (failedNodes.length === nodes.length) {\n UserNotification.error(`Request to ${action.toLowerCase()} input '${input.title}' failed. Check your Graylog logs for more information.`,\n `Input '${input.title}' could not be ${action === 'START' ? 'started' : 'stopped'}`);\n } else {\n UserNotification.warning(`Request to ${action.toLowerCase()} input '${input.title}' failed in some nodes. Check your Graylog logs for more information.`,\n `Input '${input.title}' could not be ${action === 'START' ? 'started' : 'stopped'} in all nodes`);\n }\n },\n\n start(input) {\n const url = URLUtils.qualifyUrl(ApiRoutes.ClusterInputStatesController.start(input.id).url);\n\n return fetch('PUT', url)\n .then(\n (response) => {\n this._checkInputStateChangeResponse(input, response, 'START');\n this.list();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Error starting input '${input.title}': ${error}`, `Input '${input.title}' could not be started`);\n },\n );\n },\n\n stop(input) {\n const url = URLUtils.qualifyUrl(ApiRoutes.ClusterInputStatesController.stop(input.id).url);\n\n return fetch('DELETE', url)\n .then(\n (response) => {\n this._checkInputStateChangeResponse(input, response, 'STOP');\n this.list();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Error stopping input '${input.title}': ${error}`, `Input '${input.title}' could not be stopped`);\n },\n );\n },\n }),\n);\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\n\nimport { qualifyUrl } from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport UserNotification from 'util/UserNotification';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\ntype InputTypesActionsType = {\n list: () => Promise,\n get: (inputTypeId: string) => Promise,\n}\nexport const InputTypesActions = singletonActions(\n 'core.InputTypes',\n () => Reflux.createActions({\n list: { asyncResult: true },\n get: { asyncResult: true },\n }),\n);\n\nexport type InputTypes = {\n [type: string]: string,\n};\n\nexport type ConfigurationField = {\n field_type: 'boolean' | 'text' | 'dropdown' | 'list' | 'number',\n name: string,\n human_name: string,\n description: string,\n default_value: any,\n is_optional: boolean,\n attributes: Array,\n additional_info: any,\n position: number,\n};\n\nexport type InputDescription = {\n type: string,\n name: string,\n is_exclusive: boolean,\n requested_configuration: {\n [key: string]: ConfigurationField,\n },\n link_to_docs: string,\n};\n\nexport type InputDescriptions = {\n [type: string]: InputDescription,\n};\n\nexport const InputTypesStore = singletonStore(\n 'core.InputTypes',\n () => Reflux.createStore({\n listenables: [InputTypesActions],\n sourceUrl: '/system/inputs/types',\n inputTypes: undefined,\n inputDescriptions: undefined,\n\n init() {\n this.list();\n },\n\n getInitialState(): { inputTypes: InputTypes, inputDescriptions: InputDescriptions } {\n return { inputTypes: this.inputTypes, inputDescriptions: this.inputDescriptions };\n },\n\n list() {\n const promiseTypes = fetch('GET', qualifyUrl(this.sourceUrl));\n const promiseDescriptions = fetch('GET', qualifyUrl(`${this.sourceUrl}/all`));\n const promise: Promise<[{ types: InputTypes }, InputDescriptions]> = Promise.all([promiseTypes, promiseDescriptions]);\n\n promise\n .then(\n ([typesResponse, descriptionsResponse]) => {\n this.inputTypes = typesResponse.types;\n this.inputDescriptions = descriptionsResponse;\n this.trigger(this.getInitialState());\n },\n (error) => {\n UserNotification.error(`Fetching Input Types failed with status: ${error}`,\n 'Could not retrieve Inputs');\n },\n );\n\n InputTypesActions.list.promise(promise);\n },\n\n get(inputTypeId: string) {\n const promise = fetch('GET', qualifyUrl(`${this.sourceUrl}/${inputTypeId}`));\n\n promise\n .catch((error) => {\n UserNotification.error(`Fetching input ${inputTypeId} failed with status: ${error}`,\n 'Could not retrieve input');\n });\n\n InputTypesActions.get.promise(promise);\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 moment from 'moment';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\n\ntype SortOrder = 'asc' | 'desc';\n\nexport function sortByDate(d1: string, d2: string, sortOrder: SortOrder = 'asc') {\n const d1Time = moment(d1);\n const d2Time = moment(d2);\n\n if (sortOrder === 'asc') {\n return (d1Time.isBefore(d2Time) ? -1 : d2Time.isBefore(d1Time) ? 1 : 0);\n }\n\n return (d2Time.isBefore(d1Time) ? -1 : d1Time.isBefore(d2Time) ? 1 : 0);\n}\n\nexport function naturalSortIgnoreCase(s1: string, s2: string, sortOrder: SortOrder = 'asc') {\n return (sortOrder === 'asc' ? naturalSort(s1.toLowerCase(), s2.toLowerCase()) : naturalSort(s2.toLowerCase(), s1.toLowerCase()));\n}\n"],"names":["LoaderContainer","styled","StyledInputDropdown","Input","PLACEHOLDER","_formatInput","id","title","type","key","value","_sortByTitle","input1","input2","localeCompare","StaticInput","input","disabled","InputDropdown","inputs","onLoadMessage","preselectedInputId","selectedInput","setSelectedInput","useState","onSelectedInputChange","useCallback","event","target","_onLoadMessage","preselectedInput","useMemo","get","bsStyle","onClick","inputOptions","sort","map","onChange","placeholder","toArray","propTypes","PropTypes","defaultProps","Immutable","undefined","NewInputRow","Row","createReactClass","displayName","mixins","Reflux","InputTypesStore","getInitialState","selectedInputDefinition","_formatSelectOptions","options","inputTypes","this","state","Object","keys","label","inputTypeA","inputTypeB","toLowerCase","push","_onInputSelect","setState","InputTypesActions","then","inputDefinition","_openModal","preventDefault","customConfiguration","PluginStore","find","inputConfig","onClose","customInputsComponent","CustomInputsConfiguration","component","configurationForm","open","_createInput","data","InputsActions","render","inputModal","inputTypeName","ref","configFields","requested_configuration","submitButtonText","helpBlock","typeName","submitAction","className","md","onSubmit","style","width","matchProp","href","marginLeft","InputForm","React","constructor","props","super","field","newData","jQuery","global","node","values","getValue","configuration","titleValue","globalValue","nodeValue","getValues","getTitleValue","_onSubmit","_handleChange","currentNode","permissions","PermissionsMixin","_deleteInput","window","confirm","_openStaticFieldForm","staticFieldForm","_editInput","_updateInput","definition","inputDescriptions","titleSuffix","name","actions","isPermitted","to","Routes","relative","extractorRoute","node_id","showMetricsMenuItem","subtitle","pullRight","onSelect","divider","nodeId","inputForm","includeTitleField","attributes","additionalContent","typeDefinition","description","createdFromContentPack","content_pack","contentRow","SingleNodeActions","singletonActions","asyncResult","SingleNodeStore","singletonStore","listenables","sourceUrl","init","_propagateState","_getNodeInfo","trigger","promise","fetch","URLUtils","response","InputListRow","InputsStore","getDefaultProps","globalInputs","localInputs","filteredGlobalInputs","filteredLocalInputs","filter","componentDidMount","_splitInputs","inputA","inputB","naturalSortIgnoreCase","_onFilterInputs","_isLoading","_nodeAffix","resetLoadingState","regExp","RegExp","length","filterMethod","test","_onFilterReset","onSearch","topMargin","onReset","searchButtonLabel","EntityList","bsNoItemsStyle","noItemsText","items","mapping","CREATED","INITIALIZED","INVALID_CONFIGURATION","STARTING","RUNNING","FAILED","STOPPING","STOPPED","TERMINATED","compare","state1","state2","toUpperCase","InputStatesStore","NodesStore","comparator","InputStateComparator","_labelClassForState","sortedStates","nodes","nodesWithKnownState","reduce","numberOfNodes","count","_textForState","join","inputStates","inputId","sortedInputStates","forEach","sorted","bind","popOverText","popover","placement","overlay","rootClose","bsSize","cursor","text","loading","_isInputRunning","inputState","nodeIDs","some","nodeID","_startInput","finally","_stopInput","InputIO","theme","css","colors","gray","fonts","family","monospace","MetricsStore","showDetails","UNSAFE_componentWillMount","_metricNames","metricName","MetricsActions","componentWillUnmount","_prefix","metric","_getValueFromMetric","rate","mean","_calculateMetrics","metrics","result","previous","isNaN","NaN","_formatCount","numeral","format","_formatNetworkStats","writtenBytes1Sec","writtenBytesTotal","readBytes1Sec","readBytesTotal","NumberUtils","_formatConnections","openConnections","totalConnections","_formatAllNodeDetails","_formatNodeDetails","emptyMessages","_toggleShowDetails","evt","calculatedMetrics","incomingMessages","InputStaticFields","fieldName","InputStaticFieldsStore","verticalAlign","_deleteStaticField","staticFields","formattedFields","_deleteButton","static_fields","marginBottom","_formatStaticFields","NodeOrGlobalSelect","useStore","globalState","setGlobal","nodeState","setNode","useEffect","nodeIds","_onChangeGlobal","isGlobal","checked","_onChangeNode","short_node_id","hostname","nodeSelect","help","required","StaticFieldForm","modal","fieldValue","close","onSubmitForm","_addStaticField","pattern","autoFocus","list","url","ApiRoutes","_checkInputStateChangeResponse","action","failedNodes","UserNotification","start","error","stop","promiseTypes","qualifyUrl","promiseDescriptions","Promise","all","typesResponse","descriptionsResponse","types","inputTypeId","catch","sortByDate","d1","d2","sortOrder","d1Time","moment","d2Time","isBefore","s1","s2","naturalSort"],"sourceRoot":""}