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

web-interface.assets.07ba022f-1727.c271dbe5f6b2f06530a8.js.map Maven / Gradle / Ivy

There is a newer version: 6.1.4
Show newest version
{"version":3,"file":"07ba022f-1727.c271dbe5f6b2f06530a8.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/common/PageNavigation.tsx","webpack://graylog-web-interface/./src/components/sidecars/common/CollectorIndicator.jsx","webpack://graylog-web-interface/./src/components/sidecars/common/OperatingSystemIcon.tsx","webpack://graylog-web-interface/./src/components/sidecars/common/SidecarsPageNavigation.tsx","webpack://graylog-web-interface/./src/stores/sidecars/CollectorConfigurationsStore.js","webpack://graylog-web-interface/./src/stores/sidecars/CollectorsStore.js"],"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 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 React from 'react';\nimport createReactClass from 'create-react-class';\nimport PropTypes from 'prop-types';\nimport upperFirst from 'lodash/upperFirst';\n\nimport OperatingSystemIcon from './OperatingSystemIcon';\n\nconst CollectorIndicator = createReactClass({\n  propTypes: {\n    collector: PropTypes.string.isRequired,\n    operatingSystem: PropTypes.string,\n  },\n\n  getDefaultProps() {\n    return {\n      operatingSystem: undefined,\n    };\n  },\n\n  render() {\n    const { collector, operatingSystem } = this.props;\n\n    return (\n      \n         {collector}\n        {operatingSystem &&  on {upperFirst(operatingSystem)}}\n      \n    );\n  },\n});\n\nexport default CollectorIndicator;\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 PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { Icon } from 'components/common';\n\nconst SidecarIcon = styled(Icon)`\n  margin-right: 5px;\n  margin-left: 2px;\n`;\n\ntype Props = {\n  operatingSystem: string,\n};\n\nconst matchIcon = (os: string) => {\n  if (os.includes('darwin') || os.includes('mac os')) {\n    return {\n      iconName: 'apple',\n      iconType: 'brand',\n    } as const;\n  }\n\n  if (os.includes('linux')) {\n    return {\n      iconName: 'linux',\n      iconType: 'brand',\n    } as const;\n  }\n\n  if (os.includes('win')) {\n    return {\n      iconName: 'windows',\n      iconType: 'brand',\n    } as const;\n  }\n\n  if (os.includes('freebsd')) {\n    return {\n      iconName: 'freebsd',\n      iconType: 'brand',\n    } as const;\n  }\n\n  return {\n    iconName: 'question-circle',\n    iconType: 'solid',\n  } as const;\n};\n\nconst OperatingSystemIcon = ({ operatingSystem }: Props) => {\n  const { iconName, iconType } = matchIcon(operatingSystem.trim().toLowerCase());\n\n  return (\n    \n  );\n};\n\nOperatingSystemIcon.propTypes = {\n  operatingSystem: PropTypes.string,\n};\n\nOperatingSystemIcon.defaultProps = {\n  operatingSystem: undefined,\n};\n\nexport default OperatingSystemIcon;\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 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"],"names":["Container","StyledButton","theme","items","path","title","permissions","exactPathMatch","collector","operatingSystem","SidecarIcon","matchIcon","os","OperatingSystemIcon","iconName","iconType","NAV_ITEMS","CollectorConfigurationsActions","CollectorConfigurationsStore","query","page","pageSize","baseUrl","search","uri","promise","response","error","configurationId","errorMessage","template","requestTemplate","configuration","url","method","name","payload","CollectorsActions","CollectorsStore","collectorId"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy