\n Changelog\n (\n how to upgrade)\n \n mdi-close\n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CheckForUpdates.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CheckForUpdates.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./CheckForUpdates.vue?vue&type=template&id=3325353e&scoped=true\"\nimport script from \"./CheckForUpdates.vue?vue&type=script&lang=js\"\nexport * from \"./CheckForUpdates.vue?vue&type=script&lang=js\"\nimport style0 from \"./CheckForUpdates.vue?vue&type=style&index=0&id=3325353e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3325353e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-menu',{attrs:{\"dark\":\"\",\"offset-y\":\"\",\"tile\":\"\",\"left\":\"\",\"attach\":\".v-app-bar\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c('v-btn',_vm._g({staticClass:\"px-2\",attrs:{\"plain\":\"\",\"outlined\":\"\",\"height\":\"40\"}},on),[_c('v-icon',[_vm._v(_vm._s(_vm.themes[_vm.theme]))])],1)]}}])},[_c('v-list',{attrs:{\"dense\":\"\"}},[_c('v-list-item-group',{model:{value:(_vm.theme),callback:function ($$v) {_vm.theme=$$v},expression:\"theme\"}},_vm._l((_vm.themes),function(icon,name){return _c('v-list-item',{attrs:{\"value\":name},on:{\"click\":function($event){return _vm.setTheme(name)}}},[_c('v-icon',{staticClass:\"mr-1\",attrs:{\"small\":\"\"}},[_vm._v(_vm._s(icon))]),_vm._v(\" \"+_vm._s(name)+\" \")],1)}),1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n {{ themes[theme] }}\n \n \n \n \n \n {{ icon }}\n {{ name }}\n \n \n \n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ThemeSelector.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ThemeSelector.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ThemeSelector.vue?vue&type=template&id=577722f3\"\nimport script from \"./ThemeSelector.vue?vue&type=script&lang=js\"\nexport * from \"./ThemeSelector.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-dialog',{scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c('v-btn',_vm._g(_vm._b({attrs:{\"color\":_vm.color,\"outlined\":_vm.outlined,\"small\":_vm.small}},'v-btn',attrs,false),on),[_vm._t(\"default\")],2)]}}],null,true),model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',{staticClass:\"pa-5\"},[_c('div',{staticClass:\"d-flex align-center text-h5 mb-4\"},[_vm._v(\" Node agent installation \"),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.dialog = false}}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),_c('p',[_c('a',{attrs:{\"href\":\"https://github.com/coroot/coroot-node-agent\",\"target\":\"_blank\"}},[_vm._v(\"Coroot-node-agent\")]),_vm._v(\" gathers metrics, traces, logs, and profiles, and sends them to Coroot. To ingest telemetry data, the agent must have the address of the Coroot instance and the capability to establish TCP connections with it. \")]),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Coroot URL:\")]),_c('v-form',{model:{value:(_vm.valid),callback:function ($$v) {_vm.valid=$$v},expression:\"valid\"}},[_c('v-text-field',{attrs:{\"rules\":[_vm.$validators.notEmpty, _vm.$validators.isUrl],\"placeholder\":\"http://coroot:8080\",\"outlined\":\"\",\"dense\":\"\"},model:{value:(_vm.coroot_url),callback:function ($$v) {_vm.coroot_url=$$v},expression:\"coroot_url\"}})],1),_c('v-tabs',{staticClass:\"mb-4\",attrs:{\"height\":\"40\",\"slider-size\":\"2\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('v-tab',[_c('v-icon',{staticClass:\"mr-1\"},[_vm._v(\"mdi-memory\")]),_vm._v(\"Linux node (Systemd)\")],1),_c('v-tab',[_c('v-icon',{staticClass:\"mr-1\"},[_vm._v(\"mdi-docker\")]),_vm._v(\"Docker\")],1),_c('v-tab',[_c('v-icon',{staticClass:\"mr-1\"},[_vm._v(\"mdi-kubernetes\")]),_vm._v(\"Kubernetes\")],1)],1),_c('v-tabs-items',{model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('v-tab-item',{attrs:{\"transition\":\"none\"}},[_c('p',[_vm._v(\" This script downloads the latest version of the agent and installs it as a Systemd service. Additionally, it generates an uninstall script. \")]),_c('Code',{attrs:{\"disabled\":!_vm.valid}},[_c('pre',[_vm._v(\"curl -sfL https://raw.githubusercontent.com/coroot/coroot-node-agent/main/install.sh | \\\\\\n COLLECTOR_ENDPOINT=\"+_vm._s(_vm.coroot_url)+\" \\\\\\n API_KEY=\"+_vm._s(_vm.apiKey)+\" \\\\\\n SCRAPE_INTERVAL=\"+_vm._s(_vm.scrape_interval)+\" \\\\\\n sh -\\n \")])]),_c('p',[_vm._v(\"You can read the agent log using the \"),_c('var',[_vm._v(\"journalctl\")]),_vm._v(\" command:\")]),_c('Code',[_c('pre',[_vm._v(\"sudo journalctl -u coroot-node-agent\\n \")])]),_c('p',[_vm._v(\"To uninstall the agent run the command below:\")]),_c('Code',[_c('pre',[_vm._v(\"/usr/bin/coroot-node-agent-uninstall.sh\\n \")])])],1),_c('v-tab-item',{attrs:{\"transition\":\"none\"}},[_c('Code',{attrs:{\"disabled\":!_vm.valid}},[_c('pre',[_vm._v(\"docker run --detach --name coroot-node-agent \\\\\\n --pull=always \\\\\\n --privileged --pid host \\\\\\n -v /sys/kernel/debug:/sys/kernel/debug:rw \\\\\\n -v /sys/fs/cgroup:/host/sys/fs/cgroup:ro \\\\\\n ghcr.io/coroot/coroot-node-agent:latest \\\\\\n --cgroupfs-root=/host/sys/fs/cgroup \\\\\\n --collector-endpoint=\"+_vm._s(_vm.coroot_url)+\" \\\\\\n --api-key=\"+_vm._s(_vm.apiKey)+\" \\\\\\n --scrape-interval=\"+_vm._s(_vm.scrape_interval)+\"\\n \")])]),_c('p',[_vm._v(\"To read the agent log:\")]),_c('Code',[_c('pre',[_vm._v(\"docker logs coroot-node-agent\\n \")])]),_c('p',[_vm._v(\"To uninstall the agent run the command below:\")]),_c('Code',[_c('pre',[_vm._v(\"docker rm -f coroot-node-agent\\n \")])])],1),_c('v-tab-item',{attrs:{\"transition\":\"none\"}},[_c('p',[_vm._v(\" To integrate Coroot with a Kubernetes cluster, simply install a dedicated Coroot instance using the official Helm chart. It automatically includes a DaemonSet, ensuring the agent is installed on new cluster nodes without manual intervention. \")]),_c('p',[_vm._v(\" To learn more about how to use Coroot's Helm chart, refer to the \"),_c('a',{attrs:{\"href\":\"https://coroot.com/docs/coroot-community-edition/getting-started/installation\",\"target\":\"_blank\"}},[_vm._v(\"documentation\")]),_vm._v(\". \")])])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"code\",staticClass:\"code\"},[_c('v-btn',{staticClass:\"copy\",attrs:{\"icon\":\"\",\"small\":\"\",\"dark\":\"\",\"disabled\":_vm.disabled},on:{\"click\":_vm.copy}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(_vm._s(_vm.icon))])],1),_c('div',{ref:\"body\"},[_vm._t(\"default\")],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n {{ icon }}\n \n
\n \n
\n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Code.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Code.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Code.vue?vue&type=template&id=2fddc6a1&scoped=true\"\nimport script from \"./Code.vue?vue&type=script&lang=js\"\nexport * from \"./Code.vue?vue&type=script&lang=js\"\nimport style0 from \"./Code.vue?vue&type=style&index=0&id=2fddc6a1&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2fddc6a1\",\n null\n \n)\n\nexport default component.exports","\n \n \n \n \n \n \n \n
\n Node agent installation\n \n mdi-close\n
\n
\n Coroot-node-agent gathers metrics, traces, logs, and\n profiles, and sends them to Coroot. To ingest telemetry data, the agent must have the address of the Coroot instance and the\n capability to establish TCP connections with it.\n
\n To integrate Coroot with a Kubernetes cluster, simply install a dedicated Coroot instance using the official Helm chart. It\n automatically includes a DaemonSet, ensuring the agent is installed on new cluster nodes without manual intervention.\n
\n
\n To learn more about how to use Coroot's Helm chart, refer to the\n documentation.\n
\n \n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AgentInstallation.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AgentInstallation.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./AgentInstallation.vue?vue&type=template&id=19b78e59&scoped=true\"\nimport script from \"./AgentInstallation.vue?vue&type=script&lang=js\"\nexport * from \"./AgentInstallation.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"19b78e59\",\n null\n \n)\n\nexport default component.exports","\n \n \n\n \n \n \n \n \n\n
\n No metrics found. If you just installed Coroot and node-agent, please wait a couple minutes for it to collect data.\n \n If you haven't installed node-agent, please do so now.\n
\n Install node-agent\n \n \n
\n It looks like you use Kubernetes, so Coroot requires kube-state-metrics\n to combine individual containers into applications.\n
\n Install kube-state-metrics\n \n
\n \n \n \n \n \n\n\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=f48099c0&scoped=true\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=f48099c0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f48099c0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"mx-auto\"},[_c('h1',{staticClass:\"text-h5 my-5\"},[_vm._v(\"Configuration\")]),_c('v-tabs',{attrs:{\"height\":\"40\",\"show-arrows\":\"\",\"slider-size\":\"2\"}},_vm._l((_vm.tabs),function(t){return _c('v-tab',{key:t.id,attrs:{\"to\":{ params: { tab: t.id } },\"disabled\":t.id && !_vm.projectId,\"exact\":\"\"}},[_vm._v(\" \"+_vm._s(t.name)+\" \")])}),1),(!_vm.tab)?[_c('h2',{staticClass:\"text-h5 my-5\"},[_vm._v(\"Project name\")]),_c('ProjectSettings',{attrs:{\"projectId\":_vm.projectId}}),(_vm.projectId)?[_c('h2',{staticClass:\"text-h5 mt-10 mb-5\"},[_vm._v(\"Status\")]),_c('ProjectStatus',{attrs:{\"projectId\":_vm.projectId}}),_c('h2',{staticClass:\"text-h5 mt-10 mb-5\"},[_vm._v(\"Danger zone\")]),_c('ProjectDelete',{attrs:{\"projectId\":_vm.projectId}})]:_vm._e()]:_vm._e(),(_vm.tab === 'prometheus')?[_c('h1',{staticClass:\"text-h5 my-5\"},[_vm._v(\" Prometheus integration \"),_c('a',{attrs:{\"href\":\"https://coroot.com/docs/coroot-community-edition/getting-started/project-configuration\",\"target\":\"_blank\"}},[_c('v-icon',[_vm._v(\"mdi-information-outline\")])],1)]),_c('IntegrationPrometheus',{attrs:{\"projectId\":_vm.projectId}})]:_vm._e(),(_vm.tab === 'clickhouse')?[_c('h1',{staticClass:\"text-h5 my-5\"},[_vm._v(\"ClickHouse integration\")]),_vm._m(0),_c('IntegrationClickhouse')]:_vm._e(),(_vm.tab === 'aws')?[_c('h1',{staticClass:\"text-h5 my-5\"},[_vm._v(\"AWS integration\")]),_c('IntegrationAWS')]:_vm._e(),(_vm.tab === 'inspections')?[_c('h1',{staticClass:\"text-h5 my-5\"},[_vm._v(\" Inspection configs \"),_c('a',{attrs:{\"href\":\"https://coroot.com/docs/coroot-community-edition/inspections/overview\",\"target\":\"_blank\"}},[_c('v-icon',[_vm._v(\"mdi-information-outline\")])],1)]),_c('ProjectCheckConfigs',{attrs:{\"projectId\":_vm.projectId}})]:_vm._e(),(_vm.tab === 'applications')?[_c('h2',{staticClass:\"text-h5 my-5\",attrs:{\"id\":\"categories\"}},[_vm._v(\" Application categories \"),_c('a',{attrs:{\"href\":\"https://coroot.com/docs/coroot-community-edition/getting-started/project-configuration#application-categories\",\"target\":\"_blank\"}},[_c('v-icon',[_vm._v(\"mdi-information-outline\")])],1)]),_vm._m(1),_c('ApplicationCategories'),_c('h2',{staticClass:\"text-h5 mt-10 mb-5\",attrs:{\"id\":\"custom-applications\"}},[_vm._v(\"Custom applications\")]),_c('p',[_vm._v(\"Coroot groups individual containers into applications using the following approach:\")]),_vm._m(2),_vm._m(3),_c('CustomApplications')]:_vm._e(),(_vm.tab === 'notifications')?[_c('h1',{staticClass:\"text-h5 my-5\"},[_vm._v(\" Notification integrations \"),_c('a',{attrs:{\"href\":\"https://coroot.com/docs/coroot-community-edition/getting-started/alerting\",\"target\":\"_blank\"}},[_c('v-icon',[_vm._v(\"mdi-information-outline\")])],1)]),_c('Integrations')]:_vm._e()],2)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('p',[_vm._v(\" Coroot stores \"),_c('a',{attrs:{\"href\":\"https://coroot.com/docs/coroot-community-edition/logs\",\"target\":\"_blank\"}},[_vm._v(\"logs\")]),_vm._v(\", \"),_c('a',{attrs:{\"href\":\"https://coroot.com/docs/coroot-community-edition/tracing\",\"target\":\"_blank\"}},[_vm._v(\"traces\")]),_vm._v(\", and \"),_c('a',{attrs:{\"href\":\"https://coroot.com/docs/coroot-community-edition/profiling\",\"target\":\"_blank\"}},[_vm._v(\"profiles\")]),_vm._v(\" in the ClickHouse database. \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',[_vm._v(\" You can organize your applications into groups by defining \"),_c('a',{attrs:{\"href\":\"https://en.wikipedia.org/wiki/Glob_(programming)\",\"target\":\"_blank\"}},[_vm._v(\"glob patterns\")]),_vm._v(\" in the \"),_c('var',[_vm._v(\"/\")]),_vm._v(\" format. \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_c('b',[_vm._v(\"Kubernetes metadata\")]),_vm._v(\": Pods are grouped into Deployments, StatefulSets, etc.\")]),_c('li',[_c('b',[_vm._v(\"Non-Kubernetes containers\")]),_vm._v(\": Containers such as Docker containers or Systemd units are grouped into applications by their names. For example, Systemd services named \"),_c('var',[_vm._v(\"mysql\")]),_vm._v(\" on different hosts are grouped into a single application called \"),_c('var',[_vm._v(\"mysql\")]),_vm._v(\". \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"my-5\"},[_vm._v(\" This default approach works well in most cases. However, since no one knows your system better than you do, Coroot allows you to manually adjust application groupings to better fit your specific needs. You can match desired application instances by defining \"),_c('a',{attrs:{\"href\":\"https://en.wikipedia.org/wiki/Glob_(programming)\",\"target\":\"_blank\"}},[_vm._v(\"glob patterns\")]),_vm._v(\" for \"),_c('var',[_vm._v(\"instance_name\")]),_vm._v(\". Note that this is not applicable to Kubernetes applications. \")])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.form)?_c('v-form',{ref:\"form\",staticStyle:{\"max-width\":\"800px\"},model:{value:(_vm.valid),callback:function ($$v) {_vm.valid=$$v},expression:\"valid\"}},[_c('div',{staticClass:\"caption\"},[_vm._v(\" Project is a separate infrastructure or environment with a dedicated Prometheus, e.g. \"),_c('var',[_vm._v(\"production\")]),_vm._v(\", \"),_c('var',[_vm._v(\"staging\")]),_vm._v(\" or \"),_c('var',[_vm._v(\"prod-us-west\")]),_vm._v(\". \")]),_c('v-text-field',{attrs:{\"rules\":[_vm.$validators.isSlug],\"outlined\":\"\",\"dense\":\"\",\"required\":\"\"},model:{value:(_vm.form.name),callback:function ($$v) {_vm.$set(_vm.form, \"name\", $$v)},expression:\"form.name\"}}),(_vm.error)?_c('v-alert',{attrs:{\"color\":\"red\",\"icon\":\"mdi-alert-octagon-outline\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e(),(_vm.message)?_c('v-alert',{attrs:{\"color\":\"green\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]):_vm._e(),_c('v-btn',{attrs:{\"block\":\"\",\"color\":\"primary\",\"disabled\":!_vm.valid,\"loading\":_vm.loading},on:{\"click\":_vm.save}},[_vm._v(\"Save\")])],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n
\n Project is a separate infrastructure or environment with a dedicated Prometheus, e.g. production, staging or\n prod-us-west.\n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProjectStatus.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProjectStatus.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ProjectStatus.vue?vue&type=template&id=32bc24a8&scoped=true\"\nimport script from \"./ProjectStatus.vue?vue&type=script&lang=js\"\nexport * from \"./ProjectStatus.vue?vue&type=script&lang=js\"\nimport style0 from \"./ProjectStatus.vue?vue&type=style&index=0&id=32bc24a8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"32bc24a8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"max-width\":\"800px\"}},[_c('div',{staticClass:\"d-block d-md-flex align-center\"},[_vm._m(0),_c('div',[_c('v-btn',{attrs:{\"block\":\"\",\"color\":\"red\",\"outlined\":\"\"},on:{\"click\":function($event){_vm.dialog = true}}},[_vm._v(\"Delete this project\")])],1)]),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[(_vm.loading)?_c('v-card',{staticClass:\"pa-10\"},[_c('v-progress-linear',{attrs:{\"indeterminate\":\"\"}})],1):(_vm.project)?_c('v-card',{staticClass:\"pa-4\"},[_c('div',{staticClass:\"d-flex align-center font-weight-bold mb-4\"},[_vm._v(\" Are you absolutely sure? \"),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.dialog = false}}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),_c('p',[_vm._v(\" This action cannot be undone. This will permanently delete the \"),_c('b',[_vm._v(_vm._s(_vm.project.name))]),_vm._v(\" project. \")]),_c('p',[_vm._v(\" Please type \"),_c('b',[_vm._v(_vm._s(_vm.project.name))]),_vm._v(\" to confirm \")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\"},model:{value:(_vm.confirmation),callback:function ($$v) {_vm.confirmation=$$v},expression:\"confirmation\"}}),(_vm.error)?_c('v-alert',{attrs:{\"color\":\"red\",\"icon\":\"mdi-alert-octagon-outline\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e(),_c('v-btn',{attrs:{\"block\":\"\",\"color\":\"red\",\"outlined\":\"\",\"disabled\":_vm.confirmation !== _vm.project.name},on:{\"click\":_vm.del}},[(_vm.$vuetify.breakpoint.mdAndUp)?[_vm._v(\" I understand the consequences, delete this project \")]:[_vm._v(\" Delete this project \")]],2)],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"flex-grow-1\"},[_c('div',[_c('b',[_vm._v(\"Delete this project\")])]),_c('div',[_vm._v(\"Once you delete a project, there is no going back. Please be certain.\")])])\n}]\n\nexport { render, staticRenderFns }","\n
\n
\n
\n
Delete this project
\n
Once you delete a project, there is no going back. Please be certain.
\n
\n
\n Delete this project\n
\n
\n \n \n \n \n \n
\n Are you absolutely sure?\n \n mdi-close\n
\n
\n This action cannot be undone. This will permanently delete the {{ project.name }} project.\n
\n
\n Please type {{ project.name }} to confirm\n
\n \n \n {{ error }}\n \n \n I understand the consequences, delete this project \n Delete this project \n \n \n \n
\n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProjectCheckConfigs.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProjectCheckConfigs.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ProjectCheckConfigs.vue?vue&type=template&id=6cb1ce24&scoped=true\"\nimport script from \"./ProjectCheckConfigs.vue?vue&type=script&lang=js\"\nexport * from \"./ProjectCheckConfigs.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6cb1ce24\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('v-simple-table',[_c('thead',[_c('tr',[_c('th',[_vm._v(\"Category\")]),_c('th',[_vm._v(\"Patterns\")]),_c('th',[_vm._v(\"Notify of deployments\")]),_c('th',[_vm._v(\"Actions\")])])]),_c('tbody',_vm._l((_vm.categories),function(c){return _c('tr',[_c('td',{staticClass:\"text-no-wrap\"},[_c('div',{staticClass:\"text-no-wrap\"},[_vm._v(_vm._s(c.name))])]),_c('td',{staticStyle:{\"line-height\":\"2em\"}},[(c.default)?_c('div',{staticClass:\"grey--text\"},[_vm._v(\" The default category containing applications that don't fit into other categories \")]):_vm._l(((c.builtin_patterns + ' ' + c.custom_patterns).split(' ').filter((p) => !!p)),function(p){return [_c('span',{staticClass:\"pattern\"},[_vm._v(_vm._s(p))]),_vm._v(\" Â \")]})],2),_c('td',[_vm._v(\" \"+_vm._s(c.notify_of_deployments ? 'on' : 'off')+\" \")]),_c('td',[_c('div',{staticClass:\"d-flex\"},[_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.openForm(c)}}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-pencil\")])],1),(!c.builtin)?_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.openForm(c, true)}}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-trash-can-outline\")])],1):_vm._e()],1)])])}),0)]),_c('v-btn',{staticClass:\"mt-2\",attrs:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.openForm()}}},[_vm._v(\"Add a category\")]),_c('v-dialog',{attrs:{\"max-width\":\"800\"},model:{value:(_vm.form.active),callback:function ($$v) {_vm.$set(_vm.form, \"active\", $$v)},expression:\"form.active\"}},[_c('v-card',{staticClass:\"pa-4\"},[_c('div',{staticClass:\"d-flex align-center font-weight-medium mb-4\"},[(_vm.form.new)?_c('div',[_vm._v(\"Add a new application category\")]):(_vm.form.del)?_c('div',[_vm._v(\"Delete the \\\"\"+_vm._s(_vm.form.name)+\"\\\" application category\")]):_c('div',[_vm._v(\"Edit the \\\"\"+_vm._s(_vm.form.name)+\"\\\" application category\")]),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.form.active = false}}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),_c('v-form',{ref:\"form\",model:{value:(_vm.form.valid),callback:function ($$v) {_vm.$set(_vm.form, \"valid\", $$v)},expression:\"form.valid\"}},[_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Name\")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"disabled\":_vm.form.builtin || _vm.form.del,\"rules\":[_vm.$validators.isSlug]},model:{value:(_vm.form.name),callback:function ($$v) {_vm.$set(_vm.form, \"name\", $$v)},expression:\"form.name\"}}),(!_vm.form.default)?[(_vm.form.builtin)?[_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Built-in patterns\")]),_c('v-textarea',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rows\":\"1\",\"auto-grow\":\"\",\"disabled\":\"\"},model:{value:(_vm.form.builtin_patterns),callback:function ($$v) {_vm.$set(_vm.form, \"builtin_patterns\", $$v)},expression:\"form.builtin_patterns\"}})]:_vm._e(),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Custom patterns\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\" space-delimited list of \"),_c('a',{attrs:{\"href\":\"https://en.wikipedia.org/wiki/Glob_(programming)\",\"target\":\"_blank\"}},[_vm._v(\"glob patterns\")]),_vm._v(\" in the \"),_c('var',[_vm._v(\"/\")]),_vm._v(\" format, e.g.: \"),_c('var',[_vm._v(\"staging/* test-*/*\")])]),_c('v-textarea',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rows\":\"1\",\"auto-grow\":\"\",\"disabled\":_vm.form.del},model:{value:(_vm.form.custom_patterns),callback:function ($$v) {_vm.$set(_vm.form, \"custom_patterns\", $$v)},expression:\"form.custom_patterns\"}})]:_vm._e(),_c('v-checkbox',{staticClass:\"mt-1\",attrs:{\"disabled\":_vm.form.del,\"label\":\"Get notified of deployments\",\"hide-details\":\"\"},model:{value:(_vm.form.notify_of_deployments),callback:function ($$v) {_vm.$set(_vm.form, \"notify_of_deployments\", $$v)},expression:\"form.notify_of_deployments\"}}),(_vm.form.notify_of_deployments)?_c('div',[(_vm.integrations && Object.keys(_vm.integrations).length)?_c('ul',_vm._l((_vm.integrations),function(details,type){return _c('li',[_c('span',[_vm._v(_vm._s(type))]),(details)?_c('span',{staticClass:\"grey--text\"},[_vm._v(\" (\"+_vm._s(details)+\")\")]):_vm._e()])}),0):_c('div',{staticClass:\"grey--text\"},[_vm._v(\"No notification integrations configured.\")]),_c('v-btn',{staticClass:\"mt-1\",attrs:{\"color\":\"primary\",\"small\":\"\",\"to\":{ name: 'project_settings', params: { tab: 'notifications' } }},on:{\"click\":function($event){_vm.form.active = false}}},[_vm._v(\"Configure integrations\")])],1):_vm._e(),(_vm.error)?_c('v-alert',{attrs:{\"color\":\"red\",\"icon\":\"mdi-alert-octagon-outline\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e(),(_vm.message)?_c('v-alert',{attrs:{\"color\":\"green\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]):_vm._e(),_c('div',{staticClass:\"d-flex align-center\"},[_c('v-spacer'),(_vm.form.del)?_c('v-btn',{attrs:{\"color\":\"error\",\"loading\":_vm.saving},on:{\"click\":_vm.save}},[_vm._v(\"Delete\")]):_c('v-btn',{attrs:{\"color\":\"primary\",\"disabled\":!_vm.form.valid,\"loading\":_vm.saving},on:{\"click\":_vm.save}},[_vm._v(\"Save\")])],1)],2)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n \n
\n
Category
\n
Patterns
\n
Notify of deployments
\n
Actions
\n
\n \n \n
\n
\n
{{ c.name }}
\n
\n
\n
\n The default category containing applications that don't fit into other categories\n
\n !!p)\">\n {{ p }}\n \n \n
\n
\n {{ c.notify_of_deployments ? 'on' : 'off' }}\n
\n
\n
\n mdi-pencil\n mdi-trash-can-outline\n
\n
\n
\n \n \n\n Add a category\n\n \n \n
\n
Add a new application category
\n
Delete the \"{{ form.name }}\" application category
\n
Edit the \"{{ form.name }}\" application category
\n \n mdi-close\n
\n\n \n
Name
\n \n\n \n \n
Built-in patterns
\n \n \n\n
Custom patterns
\n
\n space-delimited list of\n glob patterns\n in the <namespace>/<application_name> format, e.g.: staging/* test-*/*\n
\n \n \n\n \n
\n
\n
\n {{ type }}\n ({{ details }})\n
\n
\n
No notification integrations configured.
\n Configure integrations\n
\n\n \n {{ error }}\n \n \n {{ message }}\n \n
\n \n Delete\n Save\n
\n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ApplicationCategories.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ApplicationCategories.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ApplicationCategories.vue?vue&type=template&id=1491242a&scoped=true\"\nimport script from \"./ApplicationCategories.vue?vue&type=script&lang=js\"\nexport * from \"./ApplicationCategories.vue?vue&type=script&lang=js\"\nimport style0 from \"./ApplicationCategories.vue?vue&type=style&index=0&id=1491242a&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1491242a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('v-form',[_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Base url\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\"This URL is used for things like creating links in alerts.\")]),_c('div',{staticClass:\"d-flex\"},[_c('v-text-field',{attrs:{\"rules\":[_vm.$validators.isUrl],\"outlined\":\"\",\"dense\":\"\"},model:{value:(_vm.form.base_url),callback:function ($$v) {_vm.$set(_vm.form, \"base_url\", $$v)},expression:\"form.base_url\"}}),_c('v-btn',{staticClass:\"ml-2\",attrs:{\"color\":\"primary\",\"loading\":_vm.saving,\"height\":\"38\"},on:{\"click\":_vm.save}},[_vm._v(\"Save\")])],1),(_vm.error)?_c('v-alert',{attrs:{\"color\":\"red\",\"icon\":\"mdi-alert-octagon-outline\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e(),(_vm.message)?_c('v-alert',{attrs:{\"color\":\"green\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]):_vm._e()],1),_c('v-simple-table',[_c('thead',[_c('tr',[_c('th',[_vm._v(\"Type\")]),_c('th',[_vm._v(\"Notify of incidents\")]),_c('th',[_vm._v(\"Notify of deployments\")]),_c('th',[_vm._v(\"Actions\")])])]),_c('tbody',_vm._l((_vm.integrations),function(i){return _c('tr',[_c('td',[_vm._v(\" \"+_vm._s(i.title)+\" \"),_c('div',{staticClass:\"caption\"},[_vm._v(_vm._s(i.details))])]),_c('td',[(i.configured)?_c('v-icon',{attrs:{\"small\":\"\",\"color\":i.incidents ? 'green' : ''}},[_vm._v(\" \"+_vm._s(i.incidents ? 'mdi-check' : 'mdi-minus')+\" \")]):_vm._e()],1),_c('td',[(i.configured)?_c('v-icon',{attrs:{\"small\":\"\",\"color\":i.deployments ? 'green' : ''}},[_vm._v(\" \"+_vm._s(i.deployments ? 'mdi-check' : 'mdi-minus')+\" \")]):_vm._e()],1),_c('td',[(!i.configured)?_c('v-btn',{attrs:{\"small\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){return _vm.open(i, 'new')}}},[_vm._v(\"Configure\")]):_c('div',{staticClass:\"d-flex\"},[_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.open(i, 'edit')}}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-pencil\")])],1),_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.open(i, 'del')}}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-trash-can-outline\")])],1)],1)],1)])}),0)]),(_vm.action)?_c('IntegrationForm',{attrs:{\"type\":_vm.integration.type,\"title\":_vm.integration.title},model:{value:(_vm.action),callback:function ($$v) {_vm.action=$$v},expression:\"action\"}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-dialog',{attrs:{\"max-width\":\"800\"},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',{staticClass:\"pa-5\"},[_c('div',{staticClass:\"d-flex align-center font-weight-medium mb-4\"},[_c('div',[_vm._v(\" Configure \"+_vm._s(_vm.title)+\" integration \"),_c('a',{attrs:{\"href\":`https://coroot.com/docs/coroot-community-edition/alerting/${_vm.type}`,\"target\":\"_blank\"}},[_c('v-icon',[_vm._v(\"mdi-information-outline\")])],1),(_vm.loading)?_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"color\":\"green\",\"size\":\"30\"}}):_vm._e()],1),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.dialog = false}}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),_c('v-form',{ref:\"form\",attrs:{\"disabled\":_vm.value === 'del'},model:{value:(_vm.valid),callback:function ($$v) {_vm.valid=$$v},expression:\"valid\"}},[(_vm.type === 'slack')?_c('IntegrationFormSlack',{attrs:{\"form\":_vm.form}}):_vm._e(),(_vm.type === 'teams')?_c('IntegrationFormTeams',{attrs:{\"form\":_vm.form}}):_vm._e(),(_vm.type === 'pagerduty')?_c('IntegrationFormPagerduty',{attrs:{\"form\":_vm.form}}):_vm._e(),(_vm.type === 'opsgenie')?_c('IntegrationFormOpsgenie',{attrs:{\"form\":_vm.form}}):_vm._e(),(_vm.type === 'webhook')?_c('IntegrationFormWebhook',{attrs:{\"form\":_vm.form}}):_vm._e(),(_vm.error)?_c('v-alert',{staticClass:\"my-4\",attrs:{\"color\":\"red\",\"icon\":\"mdi-alert-octagon-outline\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e(),(_vm.message)?_c('v-alert',{staticClass:\"my-4\",attrs:{\"color\":\"green\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]):_vm._e(),_c('div',{staticClass:\"d-flex align-center\"},[_c('v-spacer'),(_vm.value === 'del')?_c('v-btn',{attrs:{\"color\":\"red\",\"loading\":_vm.saving},on:{\"click\":_vm.del}},[_vm._v(\"Delete\")]):[_c('v-btn',{staticClass:\"mr-4\",attrs:{\"color\":\"accent\",\"disabled\":!_vm.valid,\"loading\":_vm.testing},on:{\"click\":_vm.test}},[_vm._v(\"Send test alert\")]),_c('v-btn',{attrs:{\"color\":\"primary\",\"disabled\":!_vm.valid,\"loading\":_vm.saving},on:{\"click\":_vm.save}},[_vm._v(\"Save\")])]],2)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Slack app\")]),_vm._m(0),_c('v-btn',{staticClass:\"mt-3 mb-5\",attrs:{\"href\":_vm.href,\"target\":\"_blank\",\"color\":\"primary\"}},[_vm._v(\" Create Slack app \"),_c('v-icon',{staticClass:\"ml-1\",attrs:{\"small\":\"\"}},[_vm._v(\"mdi-open-in-new\")])],1),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Slack app icon\")]),_vm._m(1),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Slack Bot User OAuth Token\")]),_vm._m(2),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rules\":[_vm.$validators.notEmpty]},model:{value:(_vm.form.token),callback:function ($$v) {_vm.$set(_vm.form, \"token\", $$v)},expression:\"form.token\"}}),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Slack channel name\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\"Open Slack, create a public channel and enter its name below.\")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rules\":[_vm.$validators.notEmpty]},scopedSlots:_vm._u([{key:\"prepend-inner\",fn:function(){return [_c('span',{staticClass:\"grey--text mt-1\"},[_vm._v(\"#\")])]},proxy:true}]),model:{value:(_vm.form.default_channel),callback:function ($$v) {_vm.$set(_vm.form, \"default_channel\", $$v)},expression:\"form.default_channel\"}}),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Notify of\")]),_c('v-checkbox',{attrs:{\"label\":\"Incidents\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.form.incidents),callback:function ($$v) {_vm.$set(_vm.form, \"incidents\", $$v)},expression:\"form.incidents\"}}),_c('v-checkbox',{attrs:{\"label\":\"Deployments\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.form.deployments),callback:function ($$v) {_vm.$set(_vm.form, \"deployments\", $$v)},expression:\"form.deployments\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"caption\"},[_vm._v(\" Click the button below to create your Slack App using the Coroot configuration. \"),_c('br'),_vm._v(\" Once created, click \"),_c('b',[_vm._v(\"Install to workspace\")]),_vm._v(\" to authorize it. \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"caption mb-4\"},[_vm._v(\" Customize the image (you can use the \"),_c('a',{attrs:{\"href\":\"https://coroot.com/static/img/coroot_512.png\",\"target\":\"_blank\"}},[_vm._v(\"Coroot logo\")]),_vm._v(\") \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"caption\"},[_vm._v(\"Click on \"),_c('b',[_vm._v(\"OAuth and Permissions\")]),_vm._v(\" in the sidebar, copy the \"),_c('b',[_vm._v(\"Bot User OAuth Token\")]),_vm._v(\" and paste it here.\")])\n}]\n\nexport { render, staticRenderFns }","\n
\n
Slack app
\n
\n Click the button below to create your Slack App using the Coroot configuration. \n Once created, click Install to workspace to authorize it.\n
\n \n Create Slack app\n mdi-open-in-new\n \n\n
Slack app icon
\n
\n Customize the image (you can use the Coroot logo)\n
\n\n
Slack Bot User OAuth Token
\n
Click on OAuth and Permissions in the sidebar, copy the Bot User OAuth Token and paste it here.
\n \n \n\n
Slack channel name
\n
Open Slack, create a public channel and enter its name below.
\n \n \n #\n \n\n
Notify of
\n \n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IntegrationFormSlack.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IntegrationFormSlack.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./IntegrationFormSlack.vue?vue&type=template&id=195b12da&scoped=true\"\nimport script from \"./IntegrationFormSlack.vue?vue&type=script&lang=js\"\nexport * from \"./IntegrationFormSlack.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"195b12da\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_vm._m(0),_c('ol',{staticClass:\"mb-4 caption\"},[_vm._m(1),_c('li',[_vm._v(\"Choose a channel (or create a new one)\")]),_c('li',[_vm._v(\"Select \"),_c('v-icon',{attrs:{\"color\":\"black\"}},[_vm._v(\"mdi-dots-horizontal\")]),_vm._v(\" from the top navigation menu and choose \"),_c('b',[_vm._v(\"Connectors\")])],1),_vm._m(2),_vm._m(3),_c('li',[_vm._v(\"Copy the webhook URL and paste it below\")])]),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Webhook URL\")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rules\":[_vm.$validators.notEmpty]},model:{value:(_vm.form.webhook_url),callback:function ($$v) {_vm.$set(_vm.form, \"webhook_url\", $$v)},expression:\"form.webhook_url\"}}),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Notify of\")]),_c('v-checkbox',{attrs:{\"label\":\"Incidents\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.form.incidents),callback:function ($$v) {_vm.$set(_vm.form, \"incidents\", $$v)},expression:\"form.incidents\"}}),_c('v-checkbox',{attrs:{\"label\":\"Deployments\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.form.deployments),callback:function ($$v) {_vm.$set(_vm.form, \"deployments\", $$v)},expression:\"form.deployments\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"To configure an \"),_c('b',[_vm._v(\"Incoming webhook connector\")]),_vm._v(\" in your Microsoft Teams:\")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('li',[_vm._v(\"Navigate to \"),_c('b',[_vm._v(\"Teams\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('li',[_vm._v(\"Search for \"),_c('b',[_vm._v(\"Incoming Webhook\")]),_vm._v(\" and press the \"),_c('b',[_vm._v(\"Configure\")]),_vm._v(\" button\")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('li',[_vm._v(\" Provide a name for the webhook (e.g. \"),_c('i',[_vm._v(\"Coroot\")]),_vm._v(\"), customize the image (you can use the \"),_c('a',{attrs:{\"href\":\"https://coroot.com/static/img/coroot.png\",\"target\":\"_blank\"}},[_vm._v(\"Coroot logo\")]),_vm._v(\"), and click \"),_c('b',[_vm._v(\"Create\")])])\n}]\n\nexport { render, staticRenderFns }","\n
\n
To configure an Incoming webhook connector in your Microsoft Teams:
\n \n
Navigate to Teams
\n
Choose a channel (or create a new one)
\n
Select mdi-dots-horizontal from the top navigation menu and choose Connectors
\n
Search for Incoming Webhook and press the Configure button
\n
\n Provide a name for the webhook (e.g. Coroot), customize the image (you can use the\n Coroot logo), and click\n Create\n
\n
Copy the webhook URL and paste it below
\n \n\n
Webhook URL
\n \n \n\n
Notify of
\n \n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IntegrationFormTeams.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IntegrationFormTeams.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./IntegrationFormTeams.vue?vue&type=template&id=1b6715a0&scoped=true\"\nimport script from \"./IntegrationFormTeams.vue?vue&type=script&lang=js\"\nexport * from \"./IntegrationFormTeams.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b6715a0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_vm._m(0),_vm._m(1),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Integration Key\")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rules\":[_vm.$validators.notEmpty]},model:{value:(_vm.form.integration_key),callback:function ($$v) {_vm.$set(_vm.form, \"integration_key\", $$v)},expression:\"form.integration_key\"}}),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Notify of\")]),_c('v-checkbox',{attrs:{\"label\":\"Incidents\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.form.incidents),callback:function ($$v) {_vm.$set(_vm.form, \"incidents\", $$v)},expression:\"form.incidents\"}}),_c('v-checkbox',{attrs:{\"value\":false,\"disabled\":\"\",\"label\":\"Deployments (unavailable for Pagerduty integrations)\",\"dense\":\"\",\"hide-details\":\"\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"To configure an \"),_c('b',[_vm._v(\"Events API V2\")]),_vm._v(\" integration in your Pagerduty account:\")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ol',{staticClass:\"mb-4 caption\"},[_c('li',[_vm._v(\"Navigate to \"),_c('b',[_vm._v(\"Services\")]),_vm._v(\" → \"),_c('b',[_vm._v(\"Service Directory\")])]),_c('li',[_vm._v(\"Choose a target service (or create a new one)\")]),_c('li',[_vm._v(\"Go to \"),_c('b',[_vm._v(\"Integrations\")]),_vm._v(\" → \"),_c('b',[_vm._v(\"+ Add another integration\")]),_vm._v(\" and create the \"),_c('b',[_vm._v(\"Events API V2\")]),_vm._v(\" integration\")]),_c('li',[_vm._v(\"Change the \"),_c('b',[_vm._v(\"Integration Name\")]),_vm._v(\", if necessary (e.g. \"),_c('i',[_vm._v(\"Coroot\")]),_vm._v(\")\")]),_c('li',[_vm._v(\"Copy the \"),_c('b',[_vm._v(\"Integration Key\")]),_vm._v(\" and paste it below\")])])\n}]\n\nexport { render, staticRenderFns }","\n
\n
To configure an Events API V2 integration in your Pagerduty account:
\n \n
Navigate to Services → Service Directory
\n
Choose a target service (or create a new one)
\n
Go to Integrations → + Add another integration and create the Events API V2 integration
\n
Change the Integration Name, if necessary (e.g. Coroot)
\n
Copy the Integration Key and paste it below
\n \n\n
Integration Key
\n \n \n\n
Notify of
\n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IntegrationFormPagerduty.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IntegrationFormPagerduty.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./IntegrationFormPagerduty.vue?vue&type=template&id=c3a15680&scoped=true\"\nimport script from \"./IntegrationFormPagerduty.vue?vue&type=script&lang=js\"\nexport * from \"./IntegrationFormPagerduty.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c3a15680\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_vm._m(0),_vm._m(1),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"API Key\")]),_c('div',{staticClass:\"d-flex\"},[_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rules\":[_vm.$validators.notEmpty]},model:{value:(_vm.form.api_key),callback:function ($$v) {_vm.$set(_vm.form, \"api_key\", $$v)},expression:\"form.api_key\"}}),_c('v-checkbox',{staticClass:\"ml-3\",attrs:{\"label\":\"EU instance of Opsgenie\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.form.eu_instance),callback:function ($$v) {_vm.$set(_vm.form, \"eu_instance\", $$v)},expression:\"form.eu_instance\"}})],1),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Notify of\")]),_c('v-checkbox',{attrs:{\"label\":\"Incidents\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.form.incidents),callback:function ($$v) {_vm.$set(_vm.form, \"incidents\", $$v)},expression:\"form.incidents\"}}),_c('v-checkbox',{attrs:{\"value\":false,\"disabled\":\"\",\"label\":\"Deployments (unavailable for Opsgenie integrations)\",\"dense\":\"\",\"hide-details\":\"\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"To configure an \"),_c('b',[_vm._v(\"Rest HTTP API\")]),_vm._v(\" integration in your Opsgenie account:\")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ol',{staticClass:\"mb-4 caption\"},[_c('li',[_vm._v(\"Navigate to the \"),_c('b',[_vm._v(\"Teams\")]),_vm._v(\" page\")]),_c('li',[_vm._v(\"Choose a team (or create a new one)\")]),_c('li',[_vm._v(\"Go to \"),_c('b',[_vm._v(\"Integrations\")]),_vm._v(\" → \"),_c('b',[_vm._v(\"Add integration\")]),_vm._v(\" and create an \"),_c('b',[_vm._v(\"API\")]),_vm._v(\" integration\")]),_c('li',[_vm._v(\"Change the \"),_c('b',[_vm._v(\"Name\")]),_vm._v(\", if necessary (e.g. \"),_c('i',[_vm._v(\"Coroot\")]),_vm._v(\")\")]),_c('li',[_vm._v(\"Adjust permissions (Coroot requires only \"),_c('b',[_vm._v(\"Create and Update Access\")]),_vm._v(\")\")]),_c('li',[_vm._v(\"Press \"),_c('b',[_vm._v(\"Save Integration\")])]),_c('li',[_vm._v(\"Copy the \"),_c('b',[_vm._v(\"API Key\")]),_vm._v(\" and paste it below\")])])\n}]\n\nexport { render, staticRenderFns }","\n
\n
To configure an Rest HTTP API integration in your Opsgenie account:
\n \n
Navigate to the Teams page
\n
Choose a team (or create a new one)
\n
Go to Integrations → Add integration and create an API integration
\n
Change the Name, if necessary (e.g. Coroot)
\n
Adjust permissions (Coroot requires only Create and Update Access)
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Integrations.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Integrations.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Integrations.vue?vue&type=template&id=969b6b60&scoped=true\"\nimport script from \"./Integrations.vue?vue&type=script&lang=js\"\nexport * from \"./Integrations.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"969b6b60\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-form',{ref:\"form\",staticStyle:{\"max-width\":\"800px\"},model:{value:(_vm.valid),callback:function ($$v) {_vm.valid=$$v},expression:\"valid\"}},[_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Prometheus URL\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\"Coroot works on top of the telemetry data stored in your Prometheus server.\")]),_c('v-text-field',{staticClass:\"flex-grow-1\",attrs:{\"outlined\":\"\",\"dense\":\"\",\"rules\":[_vm.$validators.notEmpty, _vm.$validators.isUrl],\"placeholder\":\"https://prom.example.com:9090\",\"hide-details\":\"auto\",\"single-line\":\"\"},model:{value:(_vm.form.url),callback:function ($$v) {_vm.$set(_vm.form, \"url\", $$v)},expression:\"form.url\"}}),_c('v-checkbox',{staticClass:\"my-2\",attrs:{\"disabled\":!_vm.form.url.startsWith('https'),\"label\":\"Skip TLS verify\",\"hide-details\":\"\"},model:{value:(_vm.form.tls_skip_verify),callback:function ($$v) {_vm.$set(_vm.form, \"tls_skip_verify\", $$v)},expression:\"form.tls_skip_verify\"}}),_c('v-checkbox',{staticClass:\"my-2\",attrs:{\"label\":\"HTTP basic auth\",\"hide-details\":\"\"},model:{value:(_vm.basic_auth),callback:function ($$v) {_vm.basic_auth=$$v},expression:\"basic_auth\"}}),(_vm.basic_auth)?_c('div',{staticClass:\"d-flex gap\"},[_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"label\":\"username\",\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(_vm.form.basic_auth.user),callback:function ($$v) {_vm.$set(_vm.form.basic_auth, \"user\", $$v)},expression:\"form.basic_auth.user\"}}),_c('v-text-field',{attrs:{\"label\":\"password\",\"type\":\"password\",\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(_vm.form.basic_auth.password),callback:function ($$v) {_vm.$set(_vm.form.basic_auth, \"password\", $$v)},expression:\"form.basic_auth.password\"}})],1):_vm._e(),_c('v-checkbox',{staticClass:\"my-2\",attrs:{\"label\":\"Custom HTTP headers\",\"hide-details\":\"\"},model:{value:(_vm.custom_headers),callback:function ($$v) {_vm.custom_headers=$$v},expression:\"custom_headers\"}}),(_vm.custom_headers)?[_vm._l((_vm.form.custom_headers),function(h,i){return _c('div',{key:i,staticClass:\"d-flex gap mb-2 align-center\"},[_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"label\":\"header\",\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(h.key),callback:function ($$v) {_vm.$set(h, \"key\", $$v)},expression:\"h.key\"}}),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"type\":\"password\",\"label\":\"value\",\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(h.value),callback:function ($$v) {_vm.$set(h, \"value\", $$v)},expression:\"h.value\"}}),_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.form.custom_headers.splice(i, 1)}}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-trash-can-outline\")])],1)],1)}),_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.form.custom_headers.push({ key: '', value: '' })}}},[_vm._v(\"Add header\")])]:_vm._e(),_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"Refresh interval\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\" How often Coroot retrieves telemetry data from a Prometheus. The value must be greater than the \"),_c('a',{attrs:{\"href\":\"https://prometheus.io/docs/prometheus/latest/configuration/configuration/\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\"}},[_c('var',[_vm._v(\"scrape_interval\")])]),_vm._v(\" of the Prometheus server. \")]),_c('v-select',{attrs:{\"items\":_vm.refreshIntervals,\"outlined\":\"\",\"dense\":\"\",\"menu-props\":{ offsetY: true }},model:{value:(_vm.form.refresh_interval),callback:function ($$v) {_vm.$set(_vm.form, \"refresh_interval\", $$v)},expression:\"form.refresh_interval\"}}),_c('div',{staticClass:\"subtitle-1\"},[_vm._v(\"Extra selector\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\"An additional metric selector that will be added to every Prometheus query (e.g. \"),_c('var',[_vm._v(\"{cluster=\\\"us-west-1\\\"}\")]),_vm._v(\")\")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rules\":[_vm.$validators.isPrometheusSelector],\"single-line\":\"\"},model:{value:(_vm.form.extra_selector),callback:function ($$v) {_vm.$set(_vm.form, \"extra_selector\", $$v)},expression:\"form.extra_selector\"}}),(_vm.error)?_c('v-alert',{attrs:{\"color\":\"red\",\"icon\":\"mdi-alert-octagon-outline\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e(),(_vm.message)?_c('v-alert',{attrs:{\"color\":\"green\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]):_vm._e(),_c('v-btn',{attrs:{\"block\":\"\",\"color\":\"primary\",\"disabled\":!_vm.valid,\"loading\":_vm.loading},on:{\"click\":_vm.save}},[_vm._v(\"Save\")])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n
Prometheus URL
\n
Coroot works on top of the telemetry data stored in your Prometheus server.
\n \n \n\n \n
\n \n \n
\n\n \n \n
\n \n \n \n mdi-trash-can-outline\n \n
\n Add header\n \n\n
Refresh interval
\n
\n How often Coroot retrieves telemetry data from a Prometheus. The value must be greater than the\n scrape_interval\n of the Prometheus server.\n
\n \n\n
Extra selector
\n
An additional metric selector that will be added to every Prometheus query (e.g. {cluster=\"us-west-1\"})
\n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IntegrationClickhouse.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IntegrationClickhouse.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./IntegrationClickhouse.vue?vue&type=template&id=ba400c7c&scoped=true\"\nimport script from \"./IntegrationClickhouse.vue?vue&type=script&lang=js\"\nexport * from \"./IntegrationClickhouse.vue?vue&type=script&lang=js\"\nimport style0 from \"./IntegrationClickhouse.vue?vue&type=style&index=0&id=ba400c7c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ba400c7c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('p',[_vm._v(\" This integration enables Coroot to discover RDS and ElastiCache instances and collect their telemetry data. It requires permissions to describe RDS and ElastiCache instances, read their logs and read Enhanced Monitoring data from CloudWatch. \")]),_c('p',[_c('b',[_vm._v(\"Step #1\")]),_vm._v(\": create an \"),_c('a',{attrs:{\"href\":\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor\",\"target\":\"_blank\"}},[_vm._v(\" IAM policy \")]),_vm._v(\" with the \"),_c('a',{on:{\"click\":function($event){_vm.policyDialog = true}}},[_vm._v(\"following permissions\")]),_vm._v(\". \")]),_c('v-dialog',{attrs:{\"max-width\":\"800\"},model:{value:(_vm.policyDialog),callback:function ($$v) {_vm.policyDialog=$$v},expression:\"policyDialog\"}},[_c('v-card',{staticClass:\"pa-5\"},[_c('div',{staticClass:\"text-h6 d-flex mb-5\"},[_vm._v(\" MonitoringReadOnlyAccess role \"),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.policyDialog = false}}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),_c('Code',[_c('pre',[_vm._v(\"{\\n \\\"Version\\\": \\\"2012-10-17\\\",\\n \\\"Statement\\\": [\\n {\\n \\\"Effect\\\": \\\"Allow\\\",\\n \\\"Action\\\": [\\n \\\"rds:DescribeDBInstances\\\",\\n \\\"rds:DescribeDBLogFiles\\\",\\n \\\"rds:DownloadDBLogFilePortion\\\",\\n \\\"rds:ListTagsForResource\\\",\\n \\\"elasticache:DescribeCacheClusters\\\",\\n \\\"elasticache:ListTagsForResource\\\"\\n ],\\n \\\"Resource\\\": [\\n \\\"*\\\"\\n ]\\n },\\n {\\n \\\"Effect\\\": \\\"Allow\\\",\\n \\\"Action\\\": [\\n \\\"logs:GetLogEvents\\\"\\n ],\\n \\\"Resource\\\": [\\n \\\"arn:aws:logs:*:*:log-group:RDSOSMetrics:log-stream:*\\\"\\n ]\\n }\\n ]\\n}\\n \")])])],1)],1),_vm._m(0),(_vm.form)?_c('v-form',{ref:\"form\",model:{value:(_vm.valid),callback:function ($$v) {_vm.valid=$$v},expression:\"valid\"}},[_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"Region\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\"Coroot only discovers RDS and ElastiCache instances within the specified region, e.g. \"),_c('var',[_vm._v(\"us-west-1\")])]),_c('v-text-field',{attrs:{\"rules\":[_vm.$validators.notEmpty],\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"single-line\":\"\",\"clearable\":\"\"},model:{value:(_vm.form.region),callback:function ($$v) {_vm.$set(_vm.form, \"region\", $$v)},expression:\"form.region\"}}),_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"Access Key ID\")]),_c('v-text-field',{attrs:{\"rules\":[_vm.$validators.notEmpty],\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(_vm.form.access_key_id),callback:function ($$v) {_vm.$set(_vm.form, \"access_key_id\", $$v)},expression:\"form.access_key_id\"}}),_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"Secret Access Key\")]),_c('v-text-field',{attrs:{\"rules\":[_vm.$validators.notEmpty],\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"single-line\":\"\",\"type\":\"password\"},model:{value:(_vm.form.secret_access_key),callback:function ($$v) {_vm.$set(_vm.form, \"secret_access_key\", $$v)},expression:\"form.secret_access_key\"}}),_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"RDS tag filters\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\" You can limit the discovery of RDS instances by filtering them based on their tags. \"),_c('br'),_vm._v(\" Specify tag_name=tag_value pairs, \"),_c('a',{attrs:{\"href\":\"https://en.wikipedia.org/wiki/Glob_(programming)\",\"target\":\"_blank\"}},[_vm._v(\"glob patterns\")]),_vm._v(\" are supported for the value part, e.g. \"),_c('var',[_vm._v(\"team=qa,env=staging*\")]),_vm._v(\". \")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(_vm.rds_tag_filters),callback:function ($$v) {_vm.rds_tag_filters=$$v},expression:\"rds_tag_filters\"}}),_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"ElastiCache tag filters\")]),_c('div',{staticClass:\"caption\"},[_vm._v(\" You can limit the discovery of ElastiCache instances by filtering them based on their tags. \"),_c('br'),_vm._v(\" Specify tag_name=tag_value pairs, \"),_c('a',{attrs:{\"href\":\"https://en.wikipedia.org/wiki/Glob_(programming)\",\"target\":\"_blank\"}},[_vm._v(\"glob patterns\")]),_vm._v(\" are supported for the value part, e.g. \"),_c('var',[_vm._v(\"team=qa,env=staging*\")]),_vm._v(\". \")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(_vm.elasticache_tag_filters),callback:function ($$v) {_vm.elasticache_tag_filters=$$v},expression:\"elasticache_tag_filters\"}}),(_vm.error)?_c('v-alert',{staticClass:\"mt-3\",attrs:{\"color\":\"red\",\"icon\":\"mdi-alert-octagon-outline\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e(),(_vm.message)?_c('v-alert',{staticClass:\"mt-3\",attrs:{\"color\":\"green\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]):_vm._e(),_c('div',{staticClass:\"mt-3\"},[(_vm.saved.region && !_vm.form.region)?_c('v-btn',{attrs:{\"block\":\"\",\"color\":\"error\",\"loading\":_vm.loading},on:{\"click\":_vm.del}},[_vm._v(\"Delete\")]):_c('v-btn',{attrs:{\"block\":\"\",\"color\":\"primary\",\"disabled\":!_vm.valid,\"loading\":_vm.loading},on:{\"click\":_vm.save}},[_vm._v(\"Save\")])],1)],1):_vm._e(),_c('h2',{staticClass:\"text-h6 mt-10 mb-3\"},[_vm._v(\"Discovery status\")]),(_vm.form && !_vm.form.region)?_c('v-alert',{attrs:{\"color\":\"primary\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" Not configured \")]):(_vm.errors.length)?_c('v-alert',{staticClass:\"pb-2\",attrs:{\"color\":\"error\",\"outlined\":\"\",\"text\":\"\"}},_vm._l((_vm.errors),function(e){return _c('div',{staticClass:\"mb-2\"},[_vm._v(\"• \"+_vm._s(e))])}),0):_c('v-alert',{attrs:{\"color\":\"success\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" OK \")]),_c('h2',{staticClass:\"text-h6 mt-10 mb-3\"},[_vm._v(\"Discovered instances\")]),_c('v-data-table',{staticClass:\"instances\",attrs:{\"items\":_vm.instances,\"sort-by\":\"application_id\",\"must-sort\":\"\",\"dense\":\"\",\"mobile-breakpoint\":\"0\",\"items-per-page\":20,\"no-data-text\":\"No instances found\",\"headers\":[\n { value: 'application_id', text: 'Application', align: 'start' },\n { value: 'name', text: 'Instance', align: 'start' },\n { value: 'status', text: 'Status', align: 'start' },\n { value: 'engine', text: 'Engine', align: 'start' },\n { value: 'engine_version', text: 'Version', align: 'start' },\n { value: 'instance_type', text: 'Instance type', align: 'start' },\n { value: 'availability_zone', text: 'AZ', align: 'start' },\n ],\"footer-props\":{ itemsPerPageOptions: [10, 20, 50, 100, -1] }},scopedSlots:_vm._u([{key:\"item.application_id\",fn:function({ item }){return [_c('router-link',{staticClass:\"text-no-wrap\",attrs:{\"to\":{ name: 'application', params: { id: item.application_id } }}},[_vm._v(\" \"+_vm._s(_vm.$utils.appId(item.application_id).name)+\" \")])]}}])})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('p',[_c('b',[_vm._v(\"Step #2\")]),_vm._v(\": create an \"),_c('a',{attrs:{\"href\":\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console\",\"target\":\"_blank\"}},[_vm._v(\"IAM user\")]),_vm._v(\" with programmatic access, attach the policy to it and use AccessKeyID/SecretAccessKey in the form below. \")])\n}]\n\nexport { render, staticRenderFns }","\n
\n
\n This integration enables Coroot to discover RDS and ElastiCache instances and collect their telemetry data. It requires permissions to\n describe RDS and ElastiCache instances, read their logs and read Enhanced Monitoring data from CloudWatch.\n
\n Step #2: create an\n IAM user\n with programmatic access, attach the policy to it and use AccessKeyID/SecretAccessKey in the form below.\n
\n\n \n
Region
\n
Coroot only discovers RDS and ElastiCache instances within the specified region, e.g. us-west-1
\n \n\n
Access Key ID
\n \n\n
Secret Access Key
\n \n\n
RDS tag filters
\n
\n You can limit the discovery of RDS instances by filtering them based on their tags.\n \n Specify tag_name=tag_value pairs, glob patterns are\n supported for the value part, e.g. team=qa,env=staging*.\n
\n \n
ElastiCache tag filters
\n
\n You can limit the discovery of ElastiCache instances by filtering them based on their tags.\n \n Specify tag_name=tag_value pairs, glob patterns are\n supported for the value part, e.g. team=qa,env=staging*.\n
\n You can organize your applications into groups by defining\n glob patterns\n in the <namespace>/<application_name> format.\n
\n \n\n
Custom applications
\n\n
Coroot groups individual containers into applications using the following approach:
\n\n
\n
Kubernetes metadata: Pods are grouped into Deployments, StatefulSets, etc.
\n
\n Non-Kubernetes containers: Containers such as Docker containers or Systemd units are grouped into applications by their\n names. For example, Systemd services named mysql on different hosts are grouped into a single application called\n mysql.\n
\n
\n\n
\n This default approach works well in most cases. However, since no one knows your system better than you do, Coroot allows you to\n manually adjust application groupings to better fit your specific needs. You can match desired application instances by defining\n glob patterns\n for instance_name. Note that this is not applicable to Kubernetes applications.\n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FlameGraphNode.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FlameGraphNode.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./FlameGraphNode.vue?vue&type=template&id=4fa032d1&scoped=true\"\nimport script from \"./FlameGraphNode.vue?vue&type=script&lang=js\"\nexport * from \"./FlameGraphNode.vue?vue&type=script&lang=js\"\nimport style0 from \"./FlameGraphNode.vue?vue&type=style&index=0&id=4fa032d1&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4fa032d1\",\n null\n \n)\n\nexport default component.exports","\n
\n \n\n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FlameGraph.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FlameGraph.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./FlameGraph.vue?vue&type=template&id=0136caa2&scoped=true\"\nimport script from \"./FlameGraph.vue?vue&type=script&lang=js\"\nexport * from \"./FlameGraph.vue?vue&type=script&lang=js\"\nimport style0 from \"./FlameGraph.vue?vue&type=style&index=0&id=0136caa2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0136caa2\",\n null\n \n)\n\nexport default component.exports","\n
\n \n \n This page only shows traces from OpenTelemetry integrations, not from eBPF. To add OpenTelemetry SDKs to your apps, check out the docs\n for\n Go,\n Java,\n Python.\n \n Clickhouse integration is not configured. \n \n\n \n \n {{ view.error }}\n \n\n \n\n \n \n {{ v.icon }}\n {{ v.title }}\n \n \n\n \n
\n f.edit)\" @click=\"newFilter\" small icon>\n mdi-plus\n \n
\n
\n
\n
\n
\n Selection:\n \n \n time {{ format(query.ts_from, 'ts') }} — {{ format(query.ts_to, 'ts') }}\n \n \n where (\n \n trace duration\n {{ format(query.dur_from, 'dur') }} — {{ format(query.dur_to, 'dur') }}\n or \n \n trace status is Error\n )\n \n \n \n mdi-close\n \n clear selection \n \n \n \n select a chart area to explore trace attributes\n select a chart area to see traces for a specific time range, duration, or status\n \n
\n
\n
\n
\n Baseline: other events within the time window\n
\n mdi-information-outline\n Click to view a sample trace containing this attribute\n
\n \n \n
\n
\n
\n\n
\n
\n mdi-information-outline\n This section highlights the underlying reasons why traces within the selected range contain errors. It identifies the tracing\n spans where errors originated.\n
\n mdi-information-outline\n This section shows the latency FlameGraph for the selected traces. A wider frame indicates greater time consumption by that\n tracing span.\n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Tracing.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Tracing.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Tracing.vue?vue&type=template&id=e47fb9f0&scoped=true\"\nimport script from \"./Tracing.vue?vue&type=script&lang=js\"\nexport * from \"./Tracing.vue?vue&type=script&lang=js\"\nimport style0 from \"./Tracing.vue?vue&type=style&index=0&id=e47fb9f0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e47fb9f0\",\n null\n \n)\n\nexport default component.exports","\n
\n \n \n \n
\n \n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Widget.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Widget.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Widget.vue?vue&type=template&id=13e929be&scoped=true\"\nimport script from \"./Widget.vue?vue&type=script&lang=js\"\nexport * from \"./Widget.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13e929be\",\n null\n \n)\n\nexport default component.exports","\n
\n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Dashboard.vue?vue&type=template&id=5dd20f0a&scoped=true\"\nimport script from \"./Dashboard.vue?vue&type=script&lang=js\"\nexport * from \"./Dashboard.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5dd20f0a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-dialog',{attrs:{\"max-width\":\"800\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [(_vm.active)?_c('v-btn',_vm._g({staticStyle:{\"position\":\"absolute\",\"top\":\"10px\",\"right\":\"10px\"},attrs:{\"small\":\"\",\"icon\":\"\"}},on),[_c('v-icon',[_vm._v(\"mdi-cog\")])],1):_c('div',{staticClass:\"mb-2\"},[_vm._v(\" It seems this app is a \"+_vm._s(_vm.types[_vm.type].name)+\" database. \"),_c('v-btn',_vm._g({attrs:{\"color\":\"primary\",\"small\":\"\"}},on),[_vm._v(\"Configure\")]),_c('br'),_vm._v(\" If you just configured the integration, please wait a couple minutes for it to collect data. \")],1)]}}]),model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',{staticClass:\"pa-5\"},[_c('div',{staticClass:\"d-flex align-center font-weight-medium mb-4\"},[_vm._v(\" Configure \"+_vm._s(_vm.types[_vm.type].name)+\" integration \"),(_vm.loading)?_c('v-progress-circular',{staticClass:\"ml-2\",attrs:{\"indeterminate\":\"\",\"color\":\"green\",\"size\":\"24\"}}):_vm._e(),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.dialog = false}}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),(_vm.type === 'postgres')?[_c('p',[_vm._v(\" This integration allows Coroot to collect Postgres-specific metrics. It requires a database user with the \"),_c('var',[_vm._v(\"pg_monitor\")]),_vm._v(\" role and the \"),_c('var',[_vm._v(\"pg_stat_statements\")]),_vm._v(\" extension enabled. \")]),_c('Code',[_c('pre',[_vm._v(\"create role coroot with login password '';\\ngrant pg_monitor to coroot;\\ncreate extension pg_stat_statements;\\n \")])]),_c('p',[_vm._v(\"The \"),_c('var',[_vm._v(\"pg_stat_statements\")]),_vm._v(\" extension should be loaded via the \"),_c('var',[_vm._v(\"shared_preload_libraries\")]),_vm._v(\" server setting.\")])]:_vm._e(),(_vm.type === 'mysql')?[_c('p',[_vm._v(\"This integration allows Coroot to collect Mysql-specific metrics. It requires a Mysql user with the following permissions:\")]),_c('Code',[_c('pre',[_vm._v(\"CREATE USER 'coroot'@'%' IDENTIFIED BY '';\\nGRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO 'coroot'@'%';\\n \")])])]:_vm._e(),(_vm.type === 'redis')?[_c('p',[_vm._v(\"This integration allows Coroot to collect Redis-specific metrics.\")])]:_vm._e(),(_vm.config)?_c('v-form',{model:{value:(_vm.valid),callback:function ($$v) {_vm.valid=$$v},expression:\"valid\"}},[_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"Port\")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"rules\":[_vm.$validators.notEmpty],\"hide-details\":\"\"},model:{value:(_vm.config.port),callback:function ($$v) {_vm.$set(_vm.config, \"port\", $$v)},expression:\"config.port\"}}),(_vm.types[_vm.type].username)?_c('div',[_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"Username\")]),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.config.credentials.username),callback:function ($$v) {_vm.$set(_vm.config.credentials, \"username\", $$v)},expression:\"config.credentials.username\"}})],1):_vm._e(),(_vm.types[_vm.type].password)?_c('div',[_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"Password\")]),_c('v-text-field',{attrs:{\"type\":\"password\",\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\"},model:{value:(_vm.config.credentials.password),callback:function ($$v) {_vm.$set(_vm.config.credentials, \"password\", $$v)},expression:\"config.credentials.password\"}})],1):_vm._e(),(_vm.type === 'postgres')?_c('div',[_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"SSL Mode\")]),_c('v-select',{attrs:{\"items\":['disable', 'require', 'verify-ca'],\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"menu-props\":{ offsetY: true }},model:{value:(_vm.sslmode),callback:function ($$v) {_vm.sslmode=$$v},expression:\"sslmode\"}})],1):_vm._e(),(_vm.type === 'mysql')?_c('div',[_c('div',{staticClass:\"subtitle-1 mt-3\"},[_vm._v(\"TLS\")]),_c('v-select',{attrs:{\"items\":['false', 'true', 'skip-verify', 'preferred'],\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"menu-props\":{ offsetY: true }},model:{value:(_vm.tls),callback:function ($$v) {_vm.tls=$$v},expression:\"tls\"}})],1):_vm._e(),(_vm.error)?_c('v-alert',{staticClass:\"mt-4\",attrs:{\"color\":\"red\",\"icon\":\"mdi-alert-octagon-outline\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):_vm._e(),(_vm.message)?_c('v-alert',{staticClass:\"mt-4\",attrs:{\"color\":\"green\",\"outlined\":\"\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]):_vm._e(),_c('v-btn',{staticClass:\"mt-3\",attrs:{\"block\":\"\",\"color\":\"primary\",\"disabled\":!_vm.valid || _vm.loading},on:{\"click\":function($event){return _vm.save(false)}}},[_vm._v(\"Save\")]),(_vm.active && !_vm.config.disabled)?_c('v-btn',{staticClass:\"mt-3\",attrs:{\"block\":\"\",\"color\":\"error\",\"disabled\":_vm.loading},on:{\"click\":function($event){return _vm.save(true)}}},[_vm._v(\" Disable the integration \")]):_vm._e()],1):_vm._e()],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n mdi-cog\n \n
\n It seems this app is a {{ types[type].name }} database.\n Configure\n \n If you just configured the integration, please wait a couple minutes for it to collect data.\n
\n This integration allows Coroot to collect Postgres-specific metrics. It requires a database user with the\n pg_monitor role and the pg_stat_statements extension enabled.\n
\n \n
\ncreate role coroot with login password '<PASSWORD>';\ngrant pg_monitor to coroot;\ncreate extension pg_stat_statements;\n
\n \n
The pg_stat_statements extension should be loaded via the shared_preload_libraries server setting.
\n \n\n \n
This integration allows Coroot to collect Mysql-specific metrics. It requires a Mysql user with the following permissions:
\n \n
\nCREATE USER 'coroot'@'%' IDENTIFIED BY '<PASSWORD>';\nGRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO 'coroot'@'%';\n
\n \n \n\n \n
This integration allows Coroot to collect Redis-specific metrics.
\n \n\n \n \n
Port
\n \n\n
\n
Username
\n \n
\n
\n
Password
\n \n
\n\n
\n
SSL Mode
\n \n
\n\n
\n
TLS
\n \n
\n\n \n {{ error }}\n \n \n {{ message }}\n \n Save\n \n Disable the integration\n \n \n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ApplicationInstrumentation.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ApplicationInstrumentation.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ApplicationInstrumentation.vue?vue&type=template&id=4bbef9aa&scoped=true\"\nimport script from \"./ApplicationInstrumentation.vue?vue&type=script&lang=js\"\nexport * from \"./ApplicationInstrumentation.vue?vue&type=script&lang=js\"\nimport style0 from \"./ApplicationInstrumentation.vue?vue&type=style&index=0&id=4bbef9aa&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4bbef9aa\",\n null\n \n)\n\nexport default component.exports","\n