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

web-interface.assets.1255d548-7892.bbf0a3663e8e1e6ca414.js.map Maven / Gradle / Ivy

There is a newer version: 6.1.4
Show newest version
{"version":3,"file":"1255d548-7892.bbf0a3663e8e1e6ca414.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/ConfigurationHelper.css","webpack://graylog-web-interface/./src/components/common/PageNavigation.tsx","webpack://graylog-web-interface/./src/components/sidecars/common/SidecarsPageNavigation.tsx","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/TemplatesHelper.tsx","webpack://graylog-web-interface/./src/stores/sidecars/ConfigurationVariableStore.js","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/ConfigurationHelper.css?f9e9","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/EditConfigurationVariableModal.jsx","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/ConfigurationVariablesHelper.jsx","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/ConfigurationHelper.jsx","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/SourceViewModal.jsx","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/ImportsViewModal.jsx","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/ConfigurationTagsSelect.tsx","webpack://graylog-web-interface/./src/components/sidecars/configuration-forms/ConfigurationForm.tsx","webpack://graylog-web-interface/./src/stores/sidecars/CollectorConfigurationsStore.js","webpack://graylog-web-interface/./src/stores/sidecars/CollectorsStore.js","webpack://graylog-web-interface/./node_modules/lodash/clone.js"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.xPV2VE7mx5w5RbxBVwcf {\n    margin-top: 20px;\n}\n\n.vjxO58xdx2DWfSbCtDqn {\n    margin-top: 10px;\n}\n\n.nV67tChjqzGMJgFSXjEh {\n    white-space: pre-wrap;\n}\n\n.panel-body h3 {\n    margin-bottom: 5px;\n}\n\n.Ljky5PvbEjtFMEvWjPom {\n\tmax-height: 400px;\n}\n\n.cqjNB6UHuqa0fd42yYFA {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\n\n.heyPYufeKzilLrTBlkcz {\n    list-style-type: disc;\n    padding-left: 20px;\n    padding-top: 20px;\n}\n\n.IukKgOWYiWDLjEX1JJif {\n    width: 120px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/sidecars/configuration-forms/ConfigurationHelper.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;CACC,iBAAiB;AAClB;;AAEA;IACI,6EAA6E;AACjF;;AAEA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,YAAY;AAChB\",\"sourcesContent\":[\":local(.marginQuickReferenceText) {\\n    margin-top: 20px;\\n}\\n\\n:local(.marginTab) {\\n    margin-top: 10px;\\n}\\n\\n:local(.exampleFunction) {\\n    white-space: pre-wrap;\\n}\\n\\n.panel-body h3 {\\n    margin-bottom: 5px;\\n}\\n\\n:local(.tableMaxHeight) {\\n\\tmax-height: 400px;\\n}\\n\\n:local(.monoSpaceFont) {\\n    font-family: \\\"Roboto Mono\\\", Menlo, Monaco, Consolas, \\\"Courier New\\\", monospace;\\n}\\n\\n:local(.ulStyle) {\\n    list-style-type: disc;\\n    padding-left: 20px;\\n    padding-top: 20px;\\n}\\n\\n:local(.actionsColumn) {\\n    width: 120px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"marginQuickReferenceText\": `xPV2VE7mx5w5RbxBVwcf`,\n\t\"marginTab\": `vjxO58xdx2DWfSbCtDqn`,\n\t\"exampleFunction\": `nV67tChjqzGMJgFSXjEh`,\n\t\"tableMaxHeight\": `Ljky5PvbEjtFMEvWjPom`,\n\t\"monoSpaceFont\": `cqjNB6UHuqa0fd42yYFA`,\n\t\"ulStyle\": `heyPYufeKzilLrTBlkcz`,\n\t\"actionsColumn\": `IukKgOWYiWDLjEX1JJif`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { LinkContainer } from 'components/common/router';\nimport { IfPermitted } from 'components/common';\nimport NavItemStateIndicator, {\n  hoverIndicatorStyles,\n  activeIndicatorStyles,\n} from 'components/common/NavItemStateIndicator';\n\nconst Container = styled(ButtonToolbar)`\n  margin-bottom: 10px;\n`;\n\nconst StyledButton = styled(Button)(({ theme }) => css`\n  font-family: ${theme.fonts.family.navigation};\n  font-size: ${theme.fonts.size.navigation};\n\n  &&&& {\n    color: ${theme.colors.variant.darker.default};\n    \n    &:hover,\n    &:focus {\n      text-decoration: none;\n    }\n\n    > div {\n      &:hover,\n      &:focus {\n        color: ${theme.colors.variant.darker.default};\n      }\n    }\n\n    &:hover {\n      ${hoverIndicatorStyles(theme)}\n    }\n\n    &.active {\n      color: ${theme.colors.global.textDefault};\n\n      ${activeIndicatorStyles(theme)}\n\n      &:hover,\n      &:focus {\n        ${activeIndicatorStyles(theme)}\n      }\n    }\n  }\n`);\n\nStyledButton.displayName = 'Button';\n\ntype Props = {\n  /**\n   * List of nav items. Define permissions, if the item should only be displayed for users with specific permissions.\n   * By default, an item is active if the current URL starts with the item URL.\n   * If you only want to display an item as active only when its path matches exactly, set `exactPathMatch` to true.\n   */\n  items: Array<{\n    title: string,\n    path: string,\n    permissions?: string | Array\n    exactPathMatch?: boolean,\n  }>\n}\n\n/**\n * Simple tab navigation to allow navigating to subareas of a page.\n */\nconst PageNavigation = ({ items }: Props) => (\n  \n    {items.map(({ path, title, permissions, exactPathMatch }) => {\n      if (!path) {\n        return null;\n      }\n\n      return (\n        \n          \n            \n              \n                {title}\n              \n            \n          \n        \n      );\n    })}\n  \n);\n\nexport default PageNavigation;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport PageNavigation from 'components/common/PageNavigation';\nimport Routes from 'routing/Routes';\nimport { Row } from 'components/bootstrap';\n\nconst NAV_ITEMS = [\n  { title: 'Overview', path: Routes.SYSTEM.SIDECARS.OVERVIEW, exactPathMatch: true },\n  { title: 'Administration', path: Routes.SYSTEM.SIDECARS.ADMINISTRATION },\n  { title: 'Configuration', path: Routes.SYSTEM.SIDECARS.CONFIGURATION },\n  { title: 'Failure Tracking', path: Routes.SYSTEM.SIDECARS.FAILURE_TRACKING },\n];\n\nconst SidecarsPageNavigation = () => (\n  \n    \n  \n);\n\nexport default SidecarsPageNavigation;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nimport { Table } from 'components/bootstrap';\n\nconst TemplatesHelper = () => {\n  const _buildVariableName = (name) => `\\${sidecar.${name}}`;\n\n  return (\n    
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
NameDescription
{_buildVariableName('operatingSystem')}Name of the operating system the sidecar is running on, e.g. "Linux", "Windows"
{_buildVariableName('nodeName')}The name of the sidecar, defaults to hostname if not set.
{_buildVariableName('nodeId')}UUID of the sidecar.
{_buildVariableName('sidecarVersion')}Version string of the running sidecar.
{_buildVariableName('spoolDir')}A directory that is unique per configuration and can be used to store collector data.
{_buildVariableName('tags.')}A map of tags that are set for the sidecar. This can be used to render conditional configuration snippets. e.g.:
\n <#if sidecar.tags.webserver??>
  - /var/log/apache/*.log
</#if>
\n
\n
\n );\n};\n\nexport default TemplatesHelper;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\nimport merge from 'lodash/merge';\n\nimport * as URLUtils from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const ConfigurationVariableActions = singletonActions(\n 'core.ConfigurationVariable',\n () => Reflux.createActions({\n all: { asyncResult: true },\n save: { asyncResult: true },\n delete: { asyncResult: true },\n validate: { asyncResult: true },\n getConfigurations: { asyncResult: true },\n }),\n);\n\nexport const ConfigurationVariableStore = singletonStore(\n 'core.ConfigurationVariable',\n () => Reflux.createStore({\n listenables: [ConfigurationVariableActions],\n sourceUrl: '/sidecar/configuration_variables',\n\n all() {\n const promise = fetch('GET', URLUtils.qualifyUrl(this.sourceUrl));\n\n promise\n .catch(\n (error) => {\n UserNotification.error(`Fetching configuration variables failed with status: ${error}`,\n 'Could not retrieve configuration variables');\n },\n );\n\n ConfigurationVariableActions.all.promise(promise);\n },\n\n save(configurationVariable) {\n const request = {\n id: configurationVariable.id,\n name: configurationVariable.name,\n description: configurationVariable.description,\n content: configurationVariable.content,\n };\n\n let url = URLUtils.qualifyUrl(`${this.sourceUrl}`);\n let method;\n let action;\n\n if (configurationVariable.id === '') {\n method = 'POST';\n action = 'created';\n } else {\n url += `/${configurationVariable.id}`;\n method = 'PUT';\n action = 'updated';\n }\n\n const promise = fetch(method, url, request);\n\n promise\n .then(() => {\n UserNotification.success(`Configuration variable \"${configurationVariable.name}\" successfully ${action}`);\n }, (error) => {\n UserNotification.error(`Saving variable \"${configurationVariable.name}\" failed with status: ${error.message}`,\n 'Could not save variable');\n });\n\n ConfigurationVariableActions.save.promise(promise);\n },\n\n getConfigurations(configurationVariable) {\n const url = URLUtils.qualifyUrl(`${this.sourceUrl}/${configurationVariable.id}/configurations`);\n const promise = fetch('GET', url);\n\n promise.catch(\n (error) => {\n UserNotification.error(`Fetching configurations for this variable failed with status: ${error}`);\n },\n );\n\n ConfigurationVariableActions.getConfigurations.promise(promise);\n },\n\n delete(configurationVariable) {\n const url = URLUtils.qualifyUrl(`${this.sourceUrl}/${configurationVariable.id}`);\n const promise = fetch('DELETE', url);\n\n promise\n .then(() => {\n UserNotification.success(`Configuration variable \"${configurationVariable.name}\" successfully deleted`);\n }, (error) => {\n UserNotification.error(`Deleting variable \"${configurationVariable.name}\" failed with status: ${error.message}`,\n 'Could not delete variable');\n });\n\n ConfigurationVariableActions.delete.promise(promise);\n },\n\n validate(configurationVariable) {\n // set minimum api defaults for faster validation feedback\n const payload = {\n id: ' ',\n name: ' ',\n content: ' ',\n };\n\n merge(payload, configurationVariable);\n\n const promise = fetch('POST', URLUtils.qualifyUrl(`${this.sourceUrl}/validate`), payload);\n\n promise.catch(\n (error) => {\n UserNotification.error(`Validating variable \"${configurationVariable.name}\" failed with status: ${error.message}`,\n 'Could not validate variable');\n },\n );\n\n ConfigurationVariableActions.validate.promise(promise);\n },\n\n }),\n);\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./ConfigurationHelper.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./ConfigurationHelper.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport cloneDeep from 'lodash/cloneDeep';\nimport React from 'react';\n\nimport { Button, BootstrapModalForm, Input } from 'components/bootstrap';\nimport { ConfigurationVariableActions } from 'stores/sidecars/ConfigurationVariableStore';\n\nimport ConfigurationHelperStyle from './ConfigurationHelper.css';\n\nclass EditConfigurationVariableModal extends React.Component {\n static propTypes = {\n create: PropTypes.bool,\n id: PropTypes.string,\n name: PropTypes.string,\n description: PropTypes.string,\n content: PropTypes.string,\n saveConfigurationVariable: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n create: false,\n id: '',\n name: '',\n description: '',\n content: '',\n };\n\n constructor(props) {\n super(props);\n this.state = this._cleanState();\n }\n\n _cleanState = () => {\n const { name, id, description, content } = this.props;\n\n return {\n showModal: false,\n error: false,\n validation_errors: {},\n savedName: name,\n formData: {\n id,\n name,\n description,\n content,\n },\n };\n };\n\n _hasErrors = () => {\n const { error } = this.state;\n\n return error;\n };\n\n openModal = () => {\n this.setState({ ...this._cleanState(), showModal: true });\n };\n\n closeModal = () => {\n this.setState(this._cleanState());\n };\n\n _getId = (prefixIdName) => {\n const { id } = this.state;\n\n return `${prefixIdName} ${id}` || 'new';\n };\n\n _saved = () => {\n this.setState({ showModal: false });\n };\n\n _validateFormData = (nextFormData) => {\n ConfigurationVariableActions.validate(nextFormData).then((validation) => {\n this.setState({ validation_errors: validation.errors, error: validation.failed });\n });\n };\n\n // Needs to be after _validateFormData is defined\n // eslint-disable-next-line react/sort-comp\n _debouncedValidateFormData = debounce(this._validateFormData, 200);\n\n _formDataUpdate = (key) => {\n const { formData } = this.state;\n\n return (nextValue) => {\n const nextFormData = cloneDeep(formData);\n\n nextFormData[key] = nextValue;\n this._debouncedValidateFormData(nextFormData);\n this.setState({ formData: nextFormData });\n };\n };\n\n _save = () => {\n const { formData, savedName } = this.state;\n const { saveConfigurationVariable } = this.props;\n\n if (this._hasErrors()) {\n // Ensure we display an error on the content field, as this is not validated by the browser\n this._validateFormData(formData);\n\n return;\n }\n\n saveConfigurationVariable(formData, savedName, this._saved);\n };\n\n _handleInputChange = (event) => {\n this._formDataUpdate(event.target.name)(event.target.value);\n };\n\n _formatValidationMessage = (fieldName, defaultText) => {\n const { validation_errors: validationErrors } = this.state;\n\n if (validationErrors[fieldName]) {\n return {validationErrors[fieldName][0]};\n }\n\n return {defaultText};\n };\n\n _validationState = (fieldName) => {\n const { validation_errors: validationErrors } = this.state;\n\n if (validationErrors[fieldName]) {\n return 'error';\n }\n\n return null;\n };\n\n render() {\n const { create } = this.props;\n const { formData, showModal } = this.state;\n\n let triggerButtonContent;\n\n if (create) {\n triggerButtonContent = 'Create Variable';\n } else {\n triggerButtonContent = Edit;\n }\n\n return (\n <>\n \n {create ? 'Create' : 'Edit'} Variable ${user.{formData.name}}}\n data-telemetry-title={`${create ? 'Create' : 'Edit'} Variable user`}\n onSubmitForm={this._save}\n onCancel={this.closeModal}\n submitButtonDisabled={this._hasErrors()}\n submitButtonText=\"Save\">\n
\n \n Description (Optional)}\n name=\"description\"\n defaultValue={formData.description}\n onChange={this._handleInputChange}\n help=\"Type a description for this variable\"\n spellCheck={false} />\n \n
\n
\n \n );\n }\n}\n\nexport default EditConfigurationVariableModal;\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 Routes from 'routing/Routes';\nimport { Spinner } from 'components/common';\nimport { Button, Alert, Table, Modal, BootstrapModalConfirm, BootstrapModalWrapper } from 'components/bootstrap';\nimport { ConfigurationVariableActions } from 'stores/sidecars/ConfigurationVariableStore';\n\nimport EditConfigurationVariableModal from './EditConfigurationVariableModal';\nimport ConfigurationHelperStyle from './ConfigurationHelper.css';\n\nconst _renderConfigList = (configurations) => (\n
    \n {configurations.map((conf) => (\n
  • \n {conf.name}\n
  • \n ))}\n
\n);\n\nclass ConfigurationVariablesHelper extends React.Component {\n static propTypes = {\n onVariableRename: PropTypes.func.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showModal: false,\n showConfirmModal: false,\n configurationVariables: undefined,\n errorModalContent: {},\n variableToDelete: {},\n };\n }\n\n componentDidMount() {\n this._reloadVariables();\n }\n\n _reloadVariables = () => {\n ConfigurationVariableActions.all()\n .then((configurationVariables) => {\n this.setState({ configurationVariables: configurationVariables });\n });\n };\n\n _openErrorModal = () => {\n this.setState({ showModal: true });\n };\n\n _openErrorConfirmModal = () => {\n this.setState({ showConfirmModal: true });\n };\n\n _closeErrorModal = () => {\n this.setState({ showModal: false, showConfirmModal: false });\n };\n\n _handleDeleteConfirm = () => {\n const { variableToDelete } = this.state;\n\n ConfigurationVariableActions.delete(variableToDelete)\n .then(() => this._onSuccessfulUpdate(() => this._closeErrorModal()));\n };\n\n _handleDeleteCheck = (configVar) => () => {\n this.setState({ variableToDelete: configVar });\n\n ConfigurationVariableActions.getConfigurations(configVar).then((response) => {\n // Variable still in use: Report error\n if (response.length > 0) {\n this.setState({ errorModalContent: _renderConfigList(response) });\n this._openErrorModal();\n // Not in use, ask for confirmation\n } else {\n this._openErrorConfirmModal();\n }\n });\n };\n\n _configurationVariableListBuilder = () => {\n const variableRows = [];\n const { configurationVariables } = this.state;\n\n Object.values(configurationVariables).forEach((configVar) => {\n const escapedName = `\\${user.${configVar.name}}`;\n\n variableRows.push(\n \n {escapedName}\n {configVar.description}\n \n \n  \n \n \n ,\n );\n });\n\n return variableRows;\n };\n\n _isLoading = () => {\n const { configurationVariables } = this.state;\n\n return !configurationVariables;\n };\n\n _saveConfigurationVariable = (configurationVariable, oldName, callback) => {\n const { onVariableRename } = this.props;\n\n ConfigurationVariableActions.save.triggerPromise(configurationVariable)\n .then(() => this._onSuccessfulUpdate(() => {\n onVariableRename(oldName, configurationVariable.name);\n callback();\n }));\n };\n\n _onSuccessfulUpdate = (callback) => {\n if (typeof callback === 'function') {\n callback();\n }\n\n this._reloadVariables();\n };\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n const { variableToDelete, errorModalContent, showModal, showConfirmModal } = this.state;\n\n return (\n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n {this._configurationVariableListBuilder()}\n \n
NameDescriptionActions
\n
\n\n \n \n Error deleting configuration\n variable ${user.{variableToDelete.name}}\n \n \n \n \n

\n Cannot delete this configuration variable as it is still in use. Please remove the variable from\n the following configurations and try again.\n {errorModalContent}\n

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

Are you sure you want to remove the configuration variable {variableToDelete.name}?

\n
\n
\n );\n }\n}\n\nexport default ConfigurationVariablesHelper;\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 { Col, Panel, Row, Tab, Tabs } from 'components/bootstrap';\n\nimport TemplatesHelper from './TemplatesHelper';\nimport ConfigurationVariablesHelper from './ConfigurationVariablesHelper';\nimport ConfigurationHelperStyle from './ConfigurationHelper.css';\n\nclass ConfigurationHelper extends React.Component {\n static propTypes = {\n onVariableRename: PropTypes.func.isRequired,\n };\n\n _getId = (idName, index) => {\n const idIndex = index !== undefined ? `. ${index}` : '';\n\n return idName + idIndex;\n };\n\n render() {\n const { onVariableRename } = this.props;\n\n return (\n\n \n\n \n \n \n \n

\n These variables will be filled with the runtime information from each Sidecar\n

\n \n
\n \n

\n Use variables to share text snippets across multiple configurations.\n
\n If your configuration format needs to use literals like ${foo},\n which shall not act as a variable, you will have to write it as\n ${'$'}{foo}.\n

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

\n We provide collector configuration templates to get you started.
\n For further information please refer to the official documentation of your collector.\n

\n \n \n
\n
\n
\n \n
\n
\n );\n /* eslint-enable no-template-curly-in-string */\n }\n}\n\nexport default ConfigurationHelper;\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 isEqual from 'lodash/isEqual';\n\nimport { Modal, Button, BootstrapModalWrapper } from 'components/bootstrap';\nimport { CollectorConfigurationsActions } from 'stores/sidecars/CollectorConfigurationsStore';\n\nclass SourceViewModal extends React.Component {\n static propTypes = {\n configurationId: PropTypes.string,\n templateString: PropTypes.string,\n showModal: PropTypes.bool.isRequired,\n onHide: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n configurationId: undefined,\n templateString: undefined,\n };\n\n static initialState = {\n source: undefined,\n name: undefined,\n };\n\n constructor(props) {\n super(props);\n this.state = SourceViewModal.initialState;\n }\n\n componentDidUpdate(prevProps) {\n if (!isEqual(this.state, SourceViewModal.initialState) && !isEqual(prevProps, this.props)) {\n this.resetState();\n }\n\n if (this.props.showModal) {\n this._loadConfiguration();\n }\n }\n\n resetState = () => {\n this.setState(SourceViewModal.initialState);\n };\n\n _loadConfiguration = () => {\n // Don't load anything if neither template nor configuration ID are set\n if (!this.props.templateString && !this.props.configurationId) {\n return;\n }\n\n if (this.props.templateString) {\n CollectorConfigurationsActions.renderPreview(this.props.templateString)\n .then(\n (response) => {\n this.setState({ source: response.preview, name: 'preview' });\n },\n (error) => {\n this.setState({ source: `Error rendering preview: ${error.responseMessage ? error.responseMessage : error}` });\n },\n );\n } else {\n CollectorConfigurationsActions.getConfiguration(this.props.configurationId)\n .then(\n (configuration) => {\n this.setState({ source: configuration.template, name: configuration.name });\n },\n (error) => {\n this.setState({ source: `Error fetching configuration: ${error.responseMessage || error}` });\n },\n );\n }\n };\n\n render() {\n return (\n \n \n Configuration {this.state.name}\n \n \n
\n
\n              {this.state.source || ''}\n            
\n
\n
\n \n \n \n
\n );\n }\n}\n\nexport default SourceViewModal;\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, Alert, Modal, Tooltip } from 'components/bootstrap';\nimport { OverlayTrigger, PaginatedList, Spinner, Timestamp } from 'components/common';\nimport BootstrapModalWrapper from 'components/bootstrap/BootstrapModalWrapper';\nimport UserNotification from 'util/UserNotification';\nimport { CollectorConfigurationsActions } from 'stores/sidecars/CollectorConfigurationsStore';\n\nclass ImportsViewModal extends React.Component {\n static propTypes = {\n onApply: PropTypes.func.isRequired,\n showModal: PropTypes.bool.isRequired,\n onHide: PropTypes.func.isRequired,\n };\n\n static initialState = {\n uploads: undefined,\n totalUploads: 0,\n pagination: {\n page: 1,\n },\n };\n\n PAGE_SIZE = 10;\n\n constructor(props) {\n super(props);\n this.state = ImportsViewModal.initialState;\n }\n\n componentDidUpdate() {\n if (this.props.showModal) {\n this._loadUploads(this.state.pagination.page);\n }\n }\n\n _isLoading = () => !this.state.uploads;\n\n _loadUploads = (page) => {\n CollectorConfigurationsActions.listUploads({ page: page })\n .then(\n (uploads) => {\n this.setState({ uploads: uploads.uploads, totalUploads: uploads.total });\n },\n (error) => {\n this.setState({ uploads: [], totalUploads: 0 });\n\n UserNotification.error(`Fetching uploads failed with error: ${error}`,\n 'Could not get configuration uploads');\n },\n );\n };\n\n _onApplyButton = (selectedUpload) => {\n this.props.onApply(selectedUpload);\n };\n\n // eslint-disable-next-line class-methods-use-this\n _buildVariableName = (name) => `\\${sidecar.${name}}`;\n\n _formatUpload(upload) {\n const tooltip = {upload.collector_id};\n\n return (\n \n \n \n {upload.node_id}\n \n \n {upload.collector_name}\n \n \n \n \n \n );\n }\n\n _formatModalBody() {\n if (this._isLoading()) {\n return (\n \n );\n }\n\n const pageSize = this.PAGE_SIZE;\n const { uploads, totalUploads } = this.state;\n const formattedUploads = uploads.map((upload) => (this._formatUpload(upload)));\n\n if (totalUploads === 0) {\n return (\n \n There are no configuration uploads available. Please go to\n System -> Collectors (legacy)\n -> Details -> Import Configuration\n and import your first configuration. You need at least\n Sidecar version 0.1.8 to make this feature available.\n \n );\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {formattedUploads}\n \n
SidecarCollectorCreatedAction
\n
\n );\n }\n\n render() {\n return (\n \n \n Imports from the old Collector system\n Edit the imported configuration after pressing the Apply button by hand. Dynamic values like the node ID can\n be replaced with the variables system, e.g. {this._buildVariableName('nodeId')}\n \n \n {this._formatModalBody()}\n \n \n \n \n \n );\n }\n}\n\nexport default ImportsViewModal;\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 MultiSelect from 'components/common/MultiSelect';\n\ntype Props = {\n tags: string[],\n availableTags: { name: string }[],\n onChange: (tagsAsString: string) => void,\n};\n\nconst ConfigurationTagsSelect = ({\n tags,\n availableTags,\n onChange,\n}: Props) => {\n const tagsValue = tags.join(',');\n const tagsOptions = availableTags.map((tag) => ({ value: tag.name, label: tag.name }));\n\n return (\n \n );\n};\n\nConfigurationTagsSelect.propTypes = {\n tags: PropTypes.arrayOf(PropTypes.string).isRequired,\n availableTags: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default ConfigurationTagsSelect;\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, { useState, useRef, useEffect } from 'react';\nimport clone from 'lodash/clone';\nimport cloneDeep from 'lodash/cloneDeep';\nimport debounce from 'lodash/debounce';\nimport upperFirst from 'lodash/upperFirst';\n\nimport { ColorPickerPopover, FormSubmit, Select, SourceCodeEditor } from 'components/common';\nimport { Button, Col, ControlLabel, FormControl, FormGroup, HelpBlock, Row, Input } from 'components/bootstrap';\nimport Routes from 'routing/Routes';\nimport ColorLabel from 'components/sidecars/common/ColorLabel';\nimport { CollectorConfigurationsActions } from 'stores/sidecars/CollectorConfigurationsStore';\nimport { CollectorsActions } from 'stores/sidecars/CollectorsStore';\nimport ConfigurationHelper from 'components/sidecars/configuration-forms/ConfigurationHelper';\nimport useHistory from 'routing/useHistory';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nimport SourceViewModal from './SourceViewModal';\nimport ImportsViewModal from './ImportsViewModal';\nimport ConfigurationTagsSelect from './ConfigurationTagsSelect';\n\nimport type { Collector, Configuration, ConfigurationSidecarsResponse } from '../types';\n\ntype Props = {\n action: string,\n configuration: Configuration,\n configurationSidecars: ConfigurationSidecarsResponse,\n};\n\nconst ConfigurationForm = ({\n action,\n configuration,\n configurationSidecars,\n}: Props) => {\n const initFormData = {\n id: configuration.id,\n name: configuration.name,\n color: configuration.color,\n collector_id: configuration.collector_id,\n template: configuration.template || '',\n tags: configuration.tags || [],\n };\n\n const [collectors, setCollectors] = useState([]);\n const [formData, setFormData] = useState(initFormData);\n const [error, setError] = useState(false);\n const [validationErrors, setValidationErrors] = useState({});\n const [showPreviewModal, setShowPreviewModal] = useState(false);\n const [showUploadsModal, setShowUploadsModal] = useState(false);\n const defaultTemplates = useRef({});\n const history = useHistory();\n const sendTelemetry = useSendTelemetry();\n\n useEffect(() => {\n CollectorsActions.all().then((response) => setCollectors(response.collectors));\n }, []);\n\n const _isTemplateSet = (template) => template !== undefined && template !== '';\n\n const _hasErrors = () => error || !_isTemplateSet(formData.template);\n\n const _validateFormData = (nextFormData, checkForRequiredFields) => {\n CollectorConfigurationsActions.validate(nextFormData).then((validation) => {\n const nextValidation = clone(validation);\n\n if (checkForRequiredFields && !_isTemplateSet(nextFormData.template)) {\n nextValidation.errors.template = ['Please fill out the configuration field.'];\n nextValidation.failed = true;\n }\n\n setValidationErrors(nextValidation.errors);\n setError(nextValidation.failed);\n });\n };\n\n const _save = async () => {\n const isCreate = action === 'create';\n\n sendTelemetry(TELEMETRY_EVENT_TYPE.SIDECARS[`CONFIGURATION_${isCreate ? 'CREATED' : 'UPDATED'}`], {\n app_pathname: 'sidecars',\n app_section: 'configuration',\n });\n\n if (_hasErrors()) {\n // Ensure we display an error on the template field, as this is not validated by the browser\n _validateFormData(formData, true);\n\n return;\n }\n\n let promise;\n\n if (isCreate) {\n promise = CollectorConfigurationsActions.createConfiguration(formData)\n .then(() => history.push(Routes.SYSTEM.SIDECARS.CONFIGURATION));\n } else {\n promise = CollectorConfigurationsActions.updateConfiguration(formData);\n }\n\n await promise;\n };\n\n const _debouncedValidateFormData = debounce(_validateFormData, 200);\n\n const _formDataUpdate = (key) => (nextValue, _?: React.ChangeEvent, hideCallback?: () => void) => {\n const nextFormData = cloneDeep(formData);\n\n nextFormData[key] = nextValue;\n _debouncedValidateFormData(nextFormData, false);\n setFormData(nextFormData);\n\n if (hideCallback) {\n hideCallback();\n }\n };\n\n const _onTemplateChange = (nextTemplate) => {\n _formDataUpdate('template')(nextTemplate);\n };\n\n const replaceConfigurationVariableName = (oldname: string, newname: string) => {\n if (oldname === '' || oldname === newname) {\n return;\n }\n\n // replaceAll without having to use a Regex\n const updatedTemplate = formData.template.split(`\\${user.${oldname}}`).join(`\\${user.${newname}}`);\n\n _onTemplateChange(updatedTemplate);\n };\n\n const _onNameChange = (event) => {\n const nextName = event.target.value;\n\n _formDataUpdate('name')(nextName);\n };\n\n const _onTagsChange = (nextTags) => {\n const nextTagsArray = nextTags.split(',');\n\n _formDataUpdate('tags')(nextTagsArray);\n };\n\n const _getCollectorDefaultTemplate = (collectorId) => {\n const storedTemplate = defaultTemplates.current[collectorId];\n\n if (storedTemplate !== undefined) {\n // eslint-disable-next-line no-promise-executor-return\n return new Promise((resolve) => resolve(storedTemplate));\n }\n\n return CollectorsActions.getCollector(collectorId).then((collector) => {\n defaultTemplates.current[collectorId] = collector.default_template;\n\n return collector.default_template;\n });\n };\n\n const _onCollectorChange = async (nextId) => {\n // Start loading the request to get the default template, so it is available asap.\n const defaultTemplate = await _getCollectorDefaultTemplate(nextId);\n\n const nextFormData = cloneDeep(formData);\n\n nextFormData.collector_id = nextId;\n\n // eslint-disable-next-line no-alert\n if (!nextFormData.template || window.confirm('Do you want to use the default template for the selected Configuration?')) {\n _onTemplateChange(defaultTemplate);\n nextFormData.template = defaultTemplate;\n }\n\n _debouncedValidateFormData(nextFormData, true);\n setFormData(nextFormData);\n };\n\n const _onTemplateImport = (nextTemplate) => {\n const nextFormData = cloneDeep(formData);\n\n // eslint-disable-next-line no-alert\n if (!nextFormData.template || window.confirm('Do you want to overwrite your current work with this Configuration?')) {\n _onTemplateChange(nextTemplate);\n }\n };\n\n const _onSubmit = (event) => {\n event.preventDefault();\n _save();\n };\n\n const _onCancel = () => {\n history.goBack();\n };\n\n const _onShowSource = () => {\n setShowPreviewModal(true);\n };\n\n const _formatCollector = (collector) => (collector ? `${collector.name} on ${upperFirst(collector.node_operating_system)}` : 'Unknown collector');\n\n const _formatCollectorOptions = () => {\n const options = [];\n\n if (collectors) {\n collectors.forEach((collector) => {\n options.push({ value: collector.id, label: _formatCollector(collector) });\n });\n } else {\n options.push({ value: 'none', label: 'Loading collector list...', disable: true });\n }\n\n return options;\n };\n\n const _formatValidationMessage = (fieldName, defaultText) => {\n if (validationErrors[fieldName]) {\n return {validationErrors[fieldName][0]};\n }\n\n return {defaultText};\n };\n\n const _validationState = (fieldName) => {\n if (validationErrors[fieldName]) {\n return 'error';\n }\n\n return null;\n };\n\n const _renderCollectorTypeField = (collectorId, _collectors, _configurationSidecars) => {\n const isConfigurationInUse = _configurationSidecars.sidecar_ids && _configurationSidecars.sidecar_ids.length > 0;\n\n if (isConfigurationInUse) {\n const collector = _collectors ? _collectors.find((c) => c.id === collectorId) : undefined;\n\n return (\n \n {_formatCollector(collector)}\n \n Note: Log Collector cannot change while the Configuration is in use. Clone the Configuration\n to test it using another Collector.\n \n \n );\n }\n\n return (\n \n \n \n Configuration color\n
\n \n
\n Change color}\n onChange={_formDataUpdate('color')} />\n
\n
\n Choose a color to use for this configuration.\n
\n\n \n Configuration Assignment Tags\n
\n ({ name: tag }))}\n tags={formData.tags}\n onChange={_onTagsChange} />\n
\n Sidecars which are configured with a matching tag will automatically receive this configuration.\n
\n\n \n Collector\n {_renderCollectorTypeField(formData.collector_id, collectors, configurationSidecars)}\n \n\n \n Configuration\n {/* TODO: Figure out issue with props */}\n {/* @ts-ignore */}\n \n \n \n {_formatValidationMessage('template', 'Required. Collector configuration, see quick reference for more information.')}\n \n \n \n\n \n \n \n \n \n \n setShowPreviewModal(false)}\n templateString={formData.template} />\n setShowUploadsModal(false)}\n onApply={_onTemplateImport} />\n
\n \n \n \n \n \n );\n};\n\nConfigurationForm.propTypes = {\n action: PropTypes.oneOf(['create', 'edit']),\n configuration: PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n color: PropTypes.string.isRequired,\n collector_id: PropTypes.string.isRequired,\n template: PropTypes.string.isRequired,\n tags: PropTypes.array.isRequired,\n }),\n configurationSidecars: PropTypes.object,\n};\n\nConfigurationForm.defaultProps = {\n action: 'edit',\n configuration: {\n id: '',\n name: '',\n collector_id: '',\n template: '',\n color: '#FFFFFF',\n tags: [],\n },\n configurationSidecars: {},\n};\n\nexport default ConfigurationForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\nimport URI from 'urijs';\nimport merge from 'lodash/merge';\n\nimport * as URLUtils from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const CollectorConfigurationsActions = singletonActions(\n 'core.CollectorConfigurations',\n () => Reflux.createActions({\n all: { asyncResult: true },\n list: { asyncResult: true },\n listUploads: { asyncResult: true },\n getConfiguration: { asyncResult: true },\n getConfigurationSidecars: { asyncResult: true },\n getUploads: { asyncResult: true },\n createConfiguration: { asyncResult: true },\n updateConfiguration: { asyncResult: true },\n renderPreview: { asyncResult: true },\n copyConfiguration: { asyncResult: true },\n delete: { asyncResult: true },\n validate: { asyncResult: true },\n }),\n);\n\nexport const CollectorConfigurationsStore = singletonStore(\n 'core.CollectorConfigurations',\n () => Reflux.createStore({\n listenables: [CollectorConfigurationsActions],\n sourceUrl: '/sidecar',\n configurations: undefined,\n pagination: {\n page: undefined,\n pageSize: undefined,\n total: undefined,\n },\n total: undefined,\n paginatedConfigurations: undefined,\n query: undefined,\n\n getInitialState() {\n return {\n configurations: this.configurations,\n query: this.query,\n total: this.total,\n pagination: this.pagination,\n paginatedConfigurations: this.paginatedConfigurations,\n };\n },\n\n propagateChanges() {\n this.trigger({\n configurations: this.configurations,\n query: this.query,\n total: this.total,\n pagination: this.pagination,\n paginatedConfigurations: this.paginatedConfigurations,\n });\n },\n\n _fetchConfigurations({ query, page, pageSize }) {\n const baseUrl = `${this.sourceUrl}/configurations`;\n const search = {\n query: query,\n page: page,\n per_page: pageSize,\n };\n\n const uri = URI(baseUrl).search(search).toString();\n\n return fetch('GET', URLUtils.qualifyUrl(uri));\n },\n\n _fetchUploads({ page }) {\n const baseUrl = `${this.sourceUrl}/configurations/uploads`;\n const search = {\n page: page,\n };\n\n const uri = URI(baseUrl).search(search).toString();\n\n return fetch('GET', URLUtils.qualifyUrl(uri));\n },\n\n all() {\n const promise = this._fetchConfigurations({ pageSize: 0 });\n\n promise\n .then(\n (response) => {\n this.configurations = response.configurations;\n this.propagateChanges();\n\n return response.configurations;\n },\n (error) => {\n UserNotification.error(`Fetching collector configurations failed with status: ${error}`,\n 'Could not retrieve configurations');\n },\n );\n\n CollectorConfigurationsActions.all.promise(promise);\n },\n\n list({ query = '', page = 1, pageSize = 10 }) {\n const promise = this._fetchConfigurations({ query: query, page: page, pageSize: pageSize });\n\n promise\n .then(\n (response) => {\n this.query = response.query;\n\n this.pagination = {\n page: response.pagination.page,\n pageSize: response.pagination.per_page,\n total: response.pagination.total,\n };\n\n this.total = response.total;\n this.paginatedConfigurations = response.configurations;\n this.propagateChanges();\n\n return response.configurations;\n },\n (error) => {\n UserNotification.error(`Fetching collector configurations failed with status: ${error}`,\n 'Could not retrieve configurations');\n },\n );\n\n CollectorConfigurationsActions.list.promise(promise);\n },\n\n listUploads({ page = 1 }) {\n const promise = this._fetchUploads({ page: page });\n\n promise\n .catch(\n (error) => {\n UserNotification.error(`Fetching configuration uploads failed with status: ${error}`,\n 'Could not retrieve configurations');\n },\n );\n\n CollectorConfigurationsActions.listUploads.promise(promise);\n },\n\n refreshList() {\n this.list({ query: this.query, page: this.page, pageSize: this.pageSize });\n },\n\n getConfiguration(configurationId) {\n const promise = fetch('GET', URLUtils.qualifyUrl(`${this.sourceUrl}/configurations/${configurationId}`));\n\n promise.catch((error) => {\n let errorMessage = `Fetching Configuration failed with status: ${error}`;\n\n if (error.status === 404) {\n errorMessage = `Unable to find a Configuration with ID <${configurationId}>, please ensure it was not deleted.`;\n }\n\n UserNotification.error(errorMessage, 'Could not retrieve Configuration');\n });\n\n CollectorConfigurationsActions.getConfiguration.promise(promise);\n },\n\n getConfigurationSidecars(configurationId) {\n const promise = fetch('GET', URLUtils.qualifyUrl(`${this.sourceUrl}/configurations/${configurationId}/sidecars`));\n\n promise.catch((error) => {\n let errorMessage = `Fetching Configuration failed with status: ${error}`;\n\n if (error.status === 404) {\n errorMessage = `Unable to find a Configuration with ID <${configurationId}>, please ensure it was not deleted.`;\n }\n\n UserNotification.error(errorMessage, 'Could not retrieve Configuration');\n });\n\n CollectorConfigurationsActions.getConfigurationSidecars.promise(promise);\n },\n\n renderPreview(template) {\n const requestTemplate = {\n template: template,\n };\n\n const promise = fetch(\n 'POST',\n URLUtils.qualifyUrl(`${this.sourceUrl}/configurations/render/preview`),\n requestTemplate,\n );\n\n promise\n .catch(\n (error) => {\n UserNotification.error(`Fetching configuration preview failed with status: ${error}`,\n 'Could not retrieve preview');\n },\n );\n\n CollectorConfigurationsActions.renderPreview.promise(promise);\n },\n\n createConfiguration(configuration) {\n const url = URLUtils.qualifyUrl(`${this.sourceUrl}/configurations`);\n const method = 'POST';\n\n const promise = fetch(method, url, configuration);\n\n promise\n .then((response) => {\n UserNotification.success('', 'Configuration successfully created');\n\n return response;\n }, (error) => {\n UserNotification.error(error.status === 400 ? error.responseMessage : `Creating configuration failed with status: ${error.message}`,\n 'Could not save configuration');\n });\n\n CollectorConfigurationsActions.createConfiguration.promise(promise);\n },\n\n updateConfiguration(configuration) {\n const url = URLUtils.qualifyUrl(`${this.sourceUrl}/configurations/${configuration.id}`);\n\n const promise = fetch('PUT', url, configuration);\n\n promise\n .then((response) => {\n UserNotification.success('', 'Configuration successfully updated');\n this.refreshList();\n\n return response;\n }, (error) => {\n UserNotification.error(`Updating Configuration failed: ${error.status === 400 ? error.responseMessage : error.message}`,\n `Could not update Configuration ${configuration.name}`);\n });\n\n CollectorConfigurationsActions.updateConfiguration.promise(promise);\n },\n\n copyConfiguration(configurationId, name) {\n const url = URLUtils.qualifyUrl(`${this.sourceUrl}/configurations/${configurationId}/${name}`);\n const method = 'POST';\n\n const promise = fetch(method, url);\n\n promise\n .then((response) => {\n UserNotification.success('', `Configuration \"${name}\" successfully copied`);\n this.refreshList();\n\n return response;\n }, (error) => {\n UserNotification.error(`Saving configuration \"${name}\" failed with status: ${error.message}`,\n 'Could not save Configuration');\n });\n\n CollectorConfigurationsActions.copyConfiguration.promise(promise);\n },\n\n delete(configuration) {\n const url = URLUtils.qualifyUrl(`${this.sourceUrl}/configurations/${configuration.id}`);\n const promise = fetch('DELETE', url);\n\n promise\n .then((response) => {\n UserNotification.success('', `Configuration \"${configuration.name}\" successfully deleted`);\n this.refreshList();\n\n return response;\n }, (error) => {\n UserNotification.error(`Deleting Configuration failed: ${error.status === 400 ? error.responseMessage : error.message}`,\n `Could not delete Configuration ${configuration.name}`);\n });\n\n CollectorConfigurationsActions.delete.promise(promise);\n },\n\n validate(configuration) {\n // set minimum api defaults for faster validation feedback\n const payload = {\n name: ' ',\n collector_id: ' ',\n color: ' ',\n template: ' ',\n };\n\n merge(payload, configuration);\n\n const promise = fetch('POST', URLUtils.qualifyUrl(`${this.sourceUrl}/configurations/validate`), payload);\n\n promise\n .then(\n (response) => response,\n (error) => (\n UserNotification.error(`Validating configuration \"${payload.name}\" failed with status: ${error.message}`,\n 'Could not validate configuration')\n ),\n );\n\n CollectorConfigurationsActions.validate.promise(promise);\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';\nimport URI from 'urijs';\nimport merge from 'lodash/merge';\n\nimport * as URLUtils from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport UserNotification from 'util/UserNotification';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const CollectorsActions = singletonActions(\n 'core.Collectors',\n () => Reflux.createActions({\n getCollector: { asyncResult: true },\n all: { asyncResult: true },\n list: { asyncResult: true },\n create: { asyncResult: true },\n update: { asyncResult: true },\n delete: { asyncResult: true },\n copy: { asyncResult: true },\n validate: { asyncResult: true },\n }),\n);\n\nexport const CollectorsStore = singletonStore(\n 'core.Collectors',\n () => Reflux.createStore({\n listenables: [CollectorsActions],\n sourceUrl: '/sidecar',\n collectors: undefined,\n query: undefined,\n pagination: {\n page: undefined,\n pageSize: undefined,\n total: undefined,\n },\n total: undefined,\n paginatedCollectors: undefined,\n\n getInitialState() {\n return {\n collectors: this.collectors,\n };\n },\n\n propagateChanges() {\n this.trigger({\n collectors: this.collectors,\n paginatedCollectors: this.paginatedCollectors,\n query: this.query,\n total: this.total,\n pagination: this.pagination,\n });\n },\n\n getCollector(collectorId) {\n const promise = fetch('GET', URLUtils.qualifyUrl(`${this.sourceUrl}/collectors/${collectorId}`));\n\n promise.catch((error) => {\n let errorMessage = `Fetching Collector failed with status: ${error}`;\n\n if (error.status === 404) {\n errorMessage = `Unable to find a collector with ID <${collectorId}>, please ensure it was not deleted.`;\n }\n\n UserNotification.error(errorMessage, 'Could not retrieve Collector');\n });\n\n CollectorsActions.getCollector.promise(promise);\n },\n\n _fetchCollectors({ query, page, pageSize }) {\n const search = {\n query: query,\n page: page,\n per_page: pageSize,\n };\n\n const uri = URI(`${this.sourceUrl}/collectors/summary`).search(search).toString();\n\n return fetch('GET', URLUtils.qualifyUrl(uri));\n },\n\n all() {\n const promise = this._fetchCollectors({ pageSize: 0 });\n\n promise\n .then(\n (response) => {\n this.collectors = response.collectors;\n this.propagateChanges();\n\n return response.collectors;\n },\n (error) => {\n UserNotification.error(`Fetching collectors failed with status: ${error}`,\n 'Could not retrieve collectors');\n },\n );\n\n CollectorsActions.all.promise(promise);\n },\n\n list({ query = '', page = 1, pageSize = 10 }) {\n const promise = this._fetchCollectors({ query: query, page: page, pageSize: pageSize });\n\n promise\n .then(\n (response) => {\n this.query = response.query;\n\n this.pagination = {\n page: response.pagination.page,\n pageSize: response.pagination.per_page,\n total: response.pagination.total,\n };\n\n this.total = response.total;\n this.paginatedCollectors = response.collectors;\n\n this.propagateChanges();\n\n return response.collectors;\n },\n (error) => {\n UserNotification.error(`Fetching collectors failed with status: ${error}`,\n 'Could not retrieve collectors');\n },\n );\n\n CollectorsActions.list.promise(promise);\n },\n\n refreshList() {\n this.list({ query: this.query, page: this.pagination.page, pageSize: this.pagination.pageSize });\n },\n\n create(collector) {\n const promise = fetch('POST', URLUtils.qualifyUrl(`${this.sourceUrl}/collectors`), collector);\n\n promise\n .then(\n (response) => {\n UserNotification.success('', 'Collector successfully created');\n this.collectors = response.collectors;\n this.propagateChanges();\n\n return this.collectors;\n },\n (error) => {\n UserNotification.error(`Fetching collectors failed with status: ${error}`,\n 'Could not retrieve collectors');\n },\n );\n\n CollectorsActions.create.promise(promise);\n },\n\n update(collector) {\n const promise = fetch('PUT', URLUtils.qualifyUrl(`${this.sourceUrl}/collectors/${collector.id}`), collector);\n\n promise\n .then(\n (response) => {\n UserNotification.success('', 'Collector successfully updated');\n this.collectors = response.collectors;\n this.propagateChanges();\n\n return this.collectors;\n },\n (error) => {\n UserNotification.error(`Fetching collectors failed with status: ${error}`,\n 'Could not retrieve collectors');\n },\n );\n\n CollectorsActions.update.promise(promise);\n },\n\n delete(collector) {\n const url = URLUtils.qualifyUrl(`${this.sourceUrl}/collectors/${collector.id}`);\n const promise = fetch('DELETE', url);\n\n promise\n .then((response) => {\n UserNotification.success('', `Collector \"${collector.name}\" successfully deleted`);\n this.refreshList();\n\n return response;\n }, (error) => {\n UserNotification.error(`Deleting Collector failed: ${error.status === 400 ? error.responseMessage : error.message}`,\n `Could not delete Collector \"${collector.name}\"`);\n });\n\n CollectorsActions.delete.promise(promise);\n },\n\n copy(collectorId, name) {\n const url = URLUtils.qualifyUrl(`${this.sourceUrl}/collectors/${collectorId}/${name}`);\n const method = 'POST';\n\n const promise = fetch(method, url);\n\n promise\n .then((response) => {\n UserNotification.success('', `Collector \"${name}\" successfully copied`);\n this.refreshList();\n\n return response;\n }, (error) => {\n UserNotification.error(`Saving collector \"${name}\" failed with status: ${error.message}`,\n 'Could not save Collector');\n });\n\n CollectorsActions.copy.promise(promise);\n },\n\n validate(collector) {\n // set minimum api defaults for faster validation feedback\n const payload = {\n id: ' ',\n service_type: 'exec',\n executable_path: ' ',\n default_template: ' ',\n };\n\n merge(payload, collector);\n\n const promise = fetch('POST', URLUtils.qualifyUrl(`${this.sourceUrl}/collectors/validate`), payload);\n\n promise\n .then(\n (response) => response,\n (error) => (\n UserNotification.error(`Validating collector \"${payload.name}\" failed with status: ${error.message}`,\n 'Could not validate collector')\n ),\n );\n\n CollectorsActions.validate.promise(promise);\n },\n }),\n);\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n"],"names":["___CSS_LOADER_EXPORT___","module","Container","StyledButton","theme","items","path","title","permissions","exactPathMatch","NAV_ITEMS","_buildVariableName","name","ConfigurationVariableActions","singleton","ConfigurationVariableStore","promise","URLUtils","error","UserNotification","configurationVariable","request","url","method","action","payload","options","update","EditConfigurationVariableModal","props","id","description","content","prefixIdName","nextFormData","validation","key","formData","nextValue","savedName","saveConfigurationVariable","event","fieldName","defaultText","validationErrors","create","showModal","triggerButtonContent","_renderConfigList","configurations","conf","Routes","ConfigurationVariablesHelper","configurationVariables","variableToDelete","configVar","response","variableRows","escapedName","oldName","callback","onVariableRename","errorModalContent","showConfirmModal","idName","index","idIndex","configuration","prevProps","page","uploads","selectedUpload","upload","tooltip","pageSize","totalUploads","formattedUploads","BootstrapModalWrapper","ConfigurationTagsSelect","tags","availableTags","onChange","tagsValue","tagsOptions","tag","MultiSelect","ConfigurationForm","configurationSidecars","initFormData","collectors","setCollectors","setFormData","setError","setValidationErrors","showPreviewModal","setShowPreviewModal","showUploadsModal","setShowUploadsModal","defaultTemplates","history","useHistory","sendTelemetry","useSendTelemetry","_isTemplateSet","template","_hasErrors","_validateFormData","checkForRequiredFields","nextValidation","_save","isCreate","_debouncedValidateFormData","_formDataUpdate","_","hideCallback","_onTemplateChange","nextTemplate","replaceConfigurationVariableName","oldname","newname","updatedTemplate","_onNameChange","nextName","_onTagsChange","nextTags","nextTagsArray","_getCollectorDefaultTemplate","collectorId","storedTemplate","resolve","collector","_onCollectorChange","nextId","defaultTemplate","_onTemplateImport","_onSubmit","_onCancel","_onShowSource","_formatCollector","_formatCollectorOptions","_formatValidationMessage","_validationState","_renderCollectorTypeField","_collectors","_configurationSidecars","c","ColorLabel","CollectorConfigurationsActions","CollectorConfigurationsStore","query","baseUrl","search","uri","configurationId","errorMessage","requestTemplate","CollectorsActions","CollectorsStore","baseClone","CLONE_SYMBOLS_FLAG","clone","value"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy